2014-02-20 71 views
1

所以我寫了一個簡單的代碼來打印出我的字符串中的每個符號。當編譯它,它給了我一個錯誤艱難的,我不明白:C - 字符串給我的錯誤

代碼:

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

這裏有什麼問題:

#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]); 
    } 

} 

它給人的錯誤?

+0

'yl2.c:9:2:warning:...'這是*警告*,不是*錯誤*。 – Roddy

回答

6

scanf("%s", &my_string);不應該有&

由於您已聲明char my_string[50]; my_string作爲char *類型的字符數組,它在scanf()中預期爲警告狀態。

只是使用,scanf("%s", my_string);。數組的基地址作爲參數就足夠了。

+0

謝謝你的回答! – Veske

+0

@Veske不客氣。 –

2

scanf("%s", &my_string);scanf("%s", my_string);

my_string是一個數組,它衰減到時不[]鍵入出來的指針。 如果你輸入&my_string,你會得到一個數組指針,嚴格來說這不是一回事。這就是編譯器抱怨的原因。

2

&my_string是一個指向my_string‘char (*)[50]’

您可以使用

scanf("%s", &my_string[0]); 

或更多種常規

scanf("%s", my_string); 
1

去除掃描&標誌,它會工作 還沒有需要在這裏使用string.h