我尝试了下面的代码,得到了一个分割错误-
int size=30;
char *str;
fputs(fgets(str,size,STDIN),STDOUT);但当我把这作为-
buff=fgets(str,size,STDIN);
fputs(buff,STDOUT);效果很好。此外,如果我将malloc用于str,则第一段代码将运行。我不明白这是怎么回事。
发布于 2014-06-21 05:20:31
你的问题在于:
char *str;
// de-referenece str in ANY way.你有一个指针可以指向任何地方。访问这样的任意内存是一种未定义的行为。
它在一种情况下工作,而不是在另一种情况下工作,这纯粹是巧合,您应该提供一个适当的缓冲区,例如:
char str[100]; // or whatever size you need.或者使用malloc动态分配内存,正如您已经发现的那样。
一旦你进入了不确定的行为的黑暗世界,所有的赌注都会消失。
它可能坠毁,它可能工作,它可能导致飞行猪或鼻恶魔,或崩溃的地方时空区域成为一个奇点。底线是,不要这么做:-)
https://stackoverflow.com/questions/24338509
复制相似问题