新手关于char的问题,自学不懂

include
#include
int main(void)
{

char name [20];
printf("你丫的叫啥?\n");
scanf("%s",&name);
printf("“%s”\n",name);
printf("“%20s”\n",name);
printf("“%-20s”\n",name);
printf("“%*s”\n",strlen(name)+2,name);
return(0);
}
请问上面这一串代码哪里出错了啊,新人自学不懂啊,错误警告是这样的:错误警报
2.c: In function ‘main’:
2.c:7:2: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[40]’ [-Wformat=]
scanf("%s",&name);
^
2.c:11:2: warning: field width specifier ‘*’ expects argument of type ‘int’, but argument 2 has type ‘size_t’ [-Wformat=]
printf("“%*s”\n",strlen(name)+2,name);
下面这一串为啥又是对的呢?
#include
#include
int main(void)
{
char name[20];
int width;
printf("Please input your name:");
scanf("%s",name);
printf("A:\"%s\"\n",name);
printf("B:\"%20s\"\n",name);
printf("C:\"%-20s\"\n",name);
width=strlen(name)+3;printf("D:\"%*s\"\n",width,name);//*对应width
return(0);
}

3个回答

printf("“%*s”\n",strlen(name)+2,name);这个机油问题,那个星号肯定不对,%s要输入是字符,strlen是数字,而且你还是两个参数,printf中只有一个

chuzhouzhi
青春永不毕业 name是字符啊,书上说*在printf中可以用来来代替数字啊,而strlen(name)+2是数字啊
5 年多之前 回复

printf格式不对printf("%d:%s",strlen(nane)+2,name),"%d:%s"是格式化控制符,最后输出时,strlen(name)+2会替换在%d的位置上,name会替换在
%s的位置上。

chuzhouzhi
青春永不毕业 额,然后呢,你说的这个我知道,但是我不知道为啥不对--
5 年多之前 回复

scanf("%s",&name); //&name改成name,它的第二个参数是要首地址,而name就是首地址
printf("“%*s”\n",strlen(name)+2,name);//这个是因为 strlen()的返回值是size_t类型而*只能代替int型

q3733353520
我用双手-成就你的梦想 当然第二个其实没多大关系size_t应该是个unsigned int
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问