在循环中使用int n = strlen(...)时出现运行时错误

时间:2012-10-13 15:53:17

标签: c string loops while-loop strlen

  

可能重复:
  What’s wrong with strcpy()? (Segmentation fault)

以下代码正常工作(产量" 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);
    }

为我输入的任何字符串产生运行时错误。有什么问题?

2 个答案:

答案 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);

限制scanf中读取的字符

你提供的第一个例子不会因为“运气”而崩溃,但你正在创建一个可能崩溃的未定义行为。