我是一个初学者,并且我遇到了scanf和字符串的问题。C中的scanf和字符串的分段错误
这里是我写我的问题的一个例子。
#include <stdio.h>
#include <string.h>
int main(void)
{
char* string;
scanf("%s", &string);
if (strcmp(string, "Foo") == 0) //segmentation fault here
printf("Bar");
}
基本上,这个代码编译,但是当我运行它,我的strcmp()得到一个分段错误
,如果我替换为“&串”它的工作原理该行的“弦”,但我从编译器得到这个错误
/usr/include/stdio.h:362:12: note: expected 'const char * __restrict__' but argument is of type 'char **'
这让我觉得这个解决方案不是很理想。
另外,如果我声明的字符串是这样的:
char string[100];
,没有任何警告的作品,但这也并不理想,因为我不知道该字符串多大将是。
有没有更好的解决方案我在这里失踪,还是这些是我唯一的选择?
谢谢。
读一本书 - C是不是一个语言,通过试验和错误学习。 (在许多情况下,如果出现错误,程序将默默工作,或给出令人困惑的结果;结果导致错误的心理模型以及对数组和指针之间差异的永久理解等) – 2014-12-05 01:49:30
你需要声明足够大的字符串(正如你猜测的那样),但是有多大?阅读关于malloc。如果你将字符串声明为char string [1];你可能有一个有效的程序,但有时却失败了,因为你存储sscanf()'ed字符串的位置太小... – ChuckCottrill 2014-12-05 02:33:47