所以我正在编写一个简单的代码来打印出我的字符串中的每个符号。在编译时,它给我一个难以理解的错误:
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void) {
char my_string[50];
int i, n;
printf("Type in a string please : ");
scanf("%s", &my_string);
n = strlen(my_string);
for (i = 0;i < n; i++) {
printf("%c",my_string[i]);
}
}
它给出的错误:
gcc yl2.c -o Yl2
yl2.c: In function ‘main’:
yl2.c:9:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[50]’ [-Wformat=]
scanf("%s", &my_string);
^
这里有什么问题?
答案 0 :(得分:6)
scanf("%s", &my_string);
不应该有&
。
由于您已将char my_string[50];
my_string声明为字符数组,其类型为char *
,并期望scanf()
作为警告状态。
使用,scanf("%s", my_string);
。作为参数的数组的基址是足够的。
答案 1 :(得分:2)
scanf("%s", &my_string);
应为scanf("%s", my_string);
my_string
是一个数组,当你在没有[]的情况下输出时会衰减到指针。
如果键入&my_string
,则会得到一个数组指针,严格来说不一样。这就是编译器抱怨的原因。
答案 2 :(得分:2)
&my_string
是指向my_string
的指针,即‘char (*)[50]’
您可以使用
scanf("%s", &my_string[0]);
传统上或更多
scanf("%s", my_string);
答案 3 :(得分:1)
删除&amp;登录扫描,它会工作 也不需要在这里使用string.h