C-调用scanf()时的程序分段错误
我现在正在学习C,我直接从我正在使用的书中复制了这个小片段。当我运行它时,它会出现故障,我不知道为什么,我通过gdb运行它,它停在第9行scanf(“%s”,aName);,但是打印变量的值不会带来任何可疑的结果。这东西怎么了C-调用scanf()时的程序分段错误,c,segmentation-fault,C,Segmentation Fault,我现在正在学习C,我直接从我正在使用的书中复制了这个小片段。当我运行它时,它会出现故障,我不知道为什么,我通过gdb运行它,它停在第9行scanf(“%s”,aName);,但是打印变量的值不会带来任何可疑的结果。这东西怎么了 #include <stdio.h> int nameLength(char[]); main () { char aName[20] = {'\0'}; printf("\nEnter your first name: "); scanf(
#include <stdio.h>
int nameLength(char[]);
main () {
char aName[20] = {'\0'};
printf("\nEnter your first name: ");
scanf('%s', aName);
printf("\nYour first name contains %d letters.", nameLength(aName));
}
int nameLength(char name[]) {
int result = 0;
while (name[result] != '\0') {
result++;
}
return result;
}
#包括
int nameLength(char[]);
主要(){
字符名[20]={'\0'};
printf(“\n输入您的名字:”);
scanf(“%s”,aName);
printf(“\n您的名字包含%d个字母。”,名称长度(aName));
}
int nameLength(字符名[]){
int结果=0;
while(名称[结果]!='\0'){
结果++;
}
返回结果;
}
编辑:我忘了提到,它甚至没有显示提示或让我输入名称。它在执行后立即崩溃
scanf('%s', aName);
使用双引号:
scanf("%s", aName);
或者可以肯定的是:
scanf("%19s", aName);
要将列表中的字符串限制为19个字符,请使用
'%s'
而不是'%s'
-注意单引号和双引号之间的差异。单引号分隔字符,双引号分隔字符串scanf()
首先使用字符串参数,因此需要双引号。在scanf中使用双引号
scanf ("%s", aName);
请注意双引号
…richie如果这是一个计算字母数的练习,那么您可以使用指针执行以下操作
int nameLength(char *name)
{
int i = 0;
while(*name++) {
i++;
}
return i;
}
用标准strlen函数代替nameLenght怎么样?你输入的名字有多长?你得到了答案,但是考虑使用其他的书。code>scanf在这种情况下使用不是一个安全的函数,而且具有上述代码的书也不会很好。使用fgets比使用scanf更安全。此外,您还应该检查返回代码,看看scanf是否成功返回。您可以推荐另一本书吗?您应该在正在使用的任何编译器中打开完整警告(例如-Wall for gcc)。它将以启蒙的形式带给你很多。这会抓住这个错误,并且可能会准确地告诉您出了什么问题。