C 使用字符指针与字符数组
我想写一个简单的程序,它读取一个单词并打印字母“e”被使用的次数。当我用一个字符数组实现我的程序时,它就工作了C 使用字符指针与字符数组,c,arrays,pointers,C,Arrays,Pointers,我想写一个简单的程序,它读取一个单词并打印字母“e”被使用的次数。当我用一个字符数组实现我的程序时,它就工作了 #include <stdio.h> #define N 10 int main() { int i, count=0; char c[N]; scanf("%s", c); for (i=0;i<N;i++){ if( c[i] == 'e') count++; } printf("%d", count); } #包括 #定义n1
#include <stdio.h>
#define N 10
int main() {
int i, count=0;
char c[N];
scanf("%s", c);
for (i=0;i<N;i++){
if( c[i] == 'e') count++;
}
printf("%d", count);
}
#包括
#定义n10
int main(){
int i,计数=0;
字符c[N];
scanf(“%s”,c);
对于(i=0;i为避免输入缓冲区溢出和由此产生的未定义行为,当使用%s
格式说明符调用scanf()
时,始终包括一个小于输入缓冲区长度的最大字符修饰符。即:
scanf("%s", c);
应该是:
scanf("%9s", c);
此外,始终检查返回值(而不是参数值),以确保操作成功。在当前场景中:
if( 1 != scanf( "%9s", c) )
{
perror( "scanf for string failed" );
exit( EXIT_FAILURE );
}
// implied else, scanf successful
代码的第二个版本(除上述版本外)的问题在于声明:
char *c;
只定义指针,不定义指针指向的位置
建议添加代码块:
if( NULL == (c = malloc( N ) ) )
{
perror( "malloc failed" );
exit( EXIT_FAILURE );
}
// implied else, malloc successful
注意:stdlib.h
注意:perror()
位于stdio.h
当然,由于代码执行了一个malloc()
,然后在代码中任何稍后退出的点,它也应该将指针传递到free()
不,不是。/15char您需要分配内存来存储在指针中。阅读malloc()
\0
vs/0
-斜杠的方向很重要!不,你的第一个版本也不起作用。试着键入“AEEEEEE”(溢出缓冲区)或“ee”(任意结果)谁说指针==数组?尽管很多人认为是这样,但事实并非如此。
if( NULL == (c = malloc( N ) ) )
{
perror( "malloc failed" );
exit( EXIT_FAILURE );
}
// implied else, malloc successful