2012-10-13 41 views
-4

可能重复:
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); 
    } 

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

+1

我没有看到'strlen()'周围的循环。 – alk

回答

0
char *tekst; 
scanf("%s", &tekst); 

是错误的。你应该这样做

char tekst[100]; 
scanf("%s", tekst); 

改为。那么,你不应该这样做(因为它是不安全的),但至少这是scanf()的正确用法。 阅读文档。

0

您尝试分配给char *tekst一个字符串。但是,当scanf试图分配它时,tekst会指向一个随机存储器段,在那里你不允许写入。

您可以分配tekst与malloc,但您需要稍后释放它,或使用此语法创建一个数组char tekst[100]

无论如何,如果用户输入超过100个字符,您可能会溢出此数组。您可以限制字符之间的扫描使用scanf("%99s", tekst);

您提供的第一个示例不会因为“运气”而崩溃,但是您创建了一个可能会崩溃的未定义行为。