C - 字符串给我错误

时间:2014-02-20 09:08:10

标签: c gcc

所以我正在编写一个简单的代码来打印出我的字符串中的每个符号。在编译时,它给我一个难以理解的错误:

代码:

#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);
  ^

这里有什么问题?

4 个答案:

答案 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