以前帮老师做考大学实验室的题时,有一道题如下
字符串asasadaslove中求出as的个数
今天在复习c primer plus正好看到strncmp想用这个实现
于是有了think1.c
#include <stdio.h>
#include <string.h>
int main(void)
{
char list[21] = "asasadaslove";
int count = 0;
int i;
printf("%s\n", list);
for(i = 0;list[i+2];i++) //;list[i+2]; ;strlen(list[i+2]);
if(strncmp(list[i],"as",2)==0)
{
printf("Found: %s\n", list[i]);
count++;
}
printf("The list contained %d words beginning"
"with astro.\n", count);
return 0;
}
cc think1.c -o think1
think1.c: 在函数‘main’中:
think1.c:13:3: 警告:传递‘strncmp’的第 1 个参数时将整数赋给指针,未作类型转换
/usr/include/string.h:146:12: 附注:需要类型‘const char *’,但实参的类型为‘char’
think1.c:15:4: 警告:格式‘%s’需要类型‘char *’,但实参 2 的类型为‘int’
最终改为如下成功think2.c
#include <stdio.h>
#include <string.h>
int main(void)
{
char list[21] = "asasadaslove";
char * p = list;
int count = 0;
int i,over;
printf("%s\n", list);
for(i = 0;list[i+2];i++) //;list[i+2]; ;strlen(list[i+2]);
if(strncmp(p+i,"as",2)==0)
{
printf("Found: %s\n", p+i);
count++;
}
printf("The list contained %d words beginning"
"with astro.\n", count);
return 0;
}
char list[21]改为char * list think1.c照样出错,只有建立另外一个char * p 指针
list[i]指得是list字符串第i个字符,而char的类型是int类型,应该重新看看书,所以要想从list 字符串从第i个字符开始读取到某一位置,比如strncmp第一个参数,需要的是地址
。而printf中的%s是否需要地址呢?
。而printf中的%s是否需要地址呢?
是的,答案是需要的(