一段很简单的程序

zhangweiJQK 2013-09-21 08:12:21
一段很简单的代码 编译连接都没问题
在控制台上输入一串字符按enter后就挂了 为什么啊 环境是VS2005
#include<stdio.h>
#include<string.h>

int main()
{
char *str="";

printf("enter the string :");

gets(str);
puts(str);
//printf("%s",*str);
return 0;
}
...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Adol1111 2013-09-21
  • 打赏
  • 举报
回复
最好写const char *str="";来告诉自己这个字符串指针是否可变,虽然char *str=""没有指名是const,但在C/C++中,它指向的是一串分配在常量区的字符串常量,所以和const char*是一样的。不写的话,虽然不影响结果,但自己容易被误导。 你可以改成数组的形式,或者动态分配来表示可变,比如
char str[10] = {0};
char *str= (char*)malloc(10);
max_min_ 2013-09-21
  • 打赏
  • 举报
回复

char *str="";
//这个没有足够的空间来存放你你的数据的,
//改成
1  char str[10] = {0}; //如果需要大的空间可以把10改大一点

2 char *str= (char*)malloc(10); // 两个选择都可以
碼上道 2013-09-21
  • 打赏
  • 举报
回复
char *str="" 这个str指向的是字符串常量,不能被修改的。
mrluoluo 2013-09-21
  • 打赏
  • 举报
回复
知道是char *str=""用在gets出错了,开调试就可以看到,但为什么呢?求大神解答。 个人觉得应该是gets获得输入是一个字符一个字符的方式处理的,而char *str的结尾方式不一样,所以才出问题吧? if (bufferSize == (size_t)-1) { /* insecure case: no buffer size check, no debug filling */ while (ch != _T('\n') && ch != _TEOF) { *pointer++ = (_TCHAR)ch; ch = _getchar_helper(); } *pointer = 0; }

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧