以下代码正常工作(产量" 5"当我输入" abcde")时:
char* tekst;
scanf("%s", tekst);
int n=strlen(tekst);
printf("%d", n);
但是以下内容:
char* tekst;
scanf("%s", &tekst);
int n=strlen(tekst);
while(n--)
{
printf("%d", n);
}
为我输入的任何字符串产生运行时错误。有什么问题?
答案 0 :(得分:0)
char *tekst;
scanf("%s", &tekst);
错了。你应该宁愿做
char tekst[100];
scanf("%s", tekst);
代替。好吧,你也不应该这样做(因为它不安全),但至少这是scanf()
的正确用法。 阅读文档。
答案 1 :(得分:0)
您尝试将char *tekst
分配给字符串。但是当scanf尝试分配它时,tekst会指向一个随机的内存段,在那里你不能写。
您可以使用malloc分配tekst,但稍后需要释放它,或使用此语法char tekst[100]
创建数组。
无论如何,如果用户输入超过100个字符,您可能会溢出此数组。您可以使用scanf("%99s", tekst);
你提供的第一个例子不会因为“运气”而崩溃,但你正在创建一个可能崩溃的未定义行为。