我是C的新手,我正在试图找出并了解为什么我的代码无效。据我所知,在C中,字符串基本上是每个字符的数组。所以我一直试图通过数组搜索找到字母a然后打印出来的东西。但是每次我尝试运行它时,我的程序都会崩溃。
这是我的代码:
#include <stdio.h>
void Display(char ch[]);
int main() {
char c[50];
printf("Enter String: ");
gets(c);
Display(c);
return 0;
}
void Display(char ch[]) {
int i;
for (i = 0; i < (sizeof(ch)); i++) {
if (strcmp(ch[i],"a") == 0) {
printf( "Yes");
}
}
}
当我运行程序时,我输入一个随机字符串,例如“fdas”,然后按回车键。然后它崩溃= \
请记住我是C的新手。如果有任何解释,我是Java程序员。
答案 0 :(得分:1)
这是错误的
if(strcmp(ch[i],"a") == 0)
应该是
if (ch[i] == 'a')
而且,sizeof(ch)
没有给你字符串的长度,因为你需要strlen()
,你的Display()
函数看起来应该是这样的
void Display(char *ch) {
size_t i;
size_t length;
if (ch == NULL)
return;
length = strlen(ch);
for (i = 0 ; i < length ; i++) {
if (ch[i] == 'a') {
printf( "Yes");
}
}
}
另外,使用gets()
是不安全的,已弃用,请使用fgets()
fgets(c, sizeof(c), stdin);
优于gets(c)
因为它会阻止缓冲区溢出,请注意我在这种情况下使用了sizeof
运算符,因为c
是char
的数组并且sizeof
运算符将以字节为单位给出它的大小,并且从1 char == 1 byte
起它就可以了。
对于Display()
函数,它不一样,因为sizeof
运算符会给出ch
类型的大小,因为你真正需要的是ch
指向的字符数,因此您必须自己使用strlen()
或计算长度。