2014-01-13 120 views
-1

我不斷收到此錯誤段錯誤(核心轉儲)我不斷收到此錯誤段錯誤(核心轉儲)

我的代碼:

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char name[80]; 
    int length[10]; 
    length == sizeof(name) 
    printf("What's your name?\n"); 
    scanf("%s", name); 
    printf("The length of your name is %s", length); 
} 

編輯

好了,這裏是我的新代碼

#include <stdio.h> 
#include <string.h> 

int main (void) 
{ 
    char name[20]; 
    printf("What is your name?\n"); 
    scanf("%s", name); 
    printf("There are %d letters in your name", strlen(name)); 
} 

而且它仍然不起作用。

+1

'length == sizeof(name)'不確定這是幹什麼卡在你的代碼中間。您正在使用等號運算符而不是賦值運算符,並且沒有結尾分號。另外,'sizeof'不會告訴你一個人甚至還沒有輸入過的名字的長度(參見'strlen'並將其稱爲正確的位置。)並且,如上所述,您正在使用'% s'打印一個'int'。 – Joe

+0

這並不需要太多的信息,但要注意格式說明符。特別是你的最後一個printf使用'%s',它需要一個字符串,但你傳遞一個int。這可能是。儘管這個問題沒有太多的信息。 –

+0

@scott_fakename:他實際上傳遞了一個'int *'。 –

回答

8
printf("The length of your name is %s", length); 

%s是用於字符串。 int的格式說明符是%d。傳入不匹配的類型會導致未定義的行爲。

除此之外,您已聲明length爲int(錯誤)和length == sizeof(name)的數組1.檢查是否相等,2.什麼也不做,因爲您不使用結果。這是一個無操作。即使您使用賦值運算符(=),它仍然是錯誤的,因爲數組不可分配,並且返回值sizeof不是數組。

接下來的問題是,sizeof將返回數組的大小,以字節爲單位,而不是您讀入的字符串的長度。在這種情況下,sizeof name將始終返回80。要查找字符串的邏輯長度(直到空終止符的長度),請使用strlen。所以......

int main(void) 
{ 
    char name[80]; 
    printf("What's your name?\n"); 
    scanf("%s", name); 
    printf("The length of your name is %zu\n", strlen(name)); 
} 

最後,使用fgets代替scanf以避免緩衝區溢出。

fgets(name, sizeof name, stdin); 
+0

此外,編譯器會檢查不匹配的打印/掃描族格式說明符,這應該使這一點更加明顯。確保您運行的編譯器的所有警告。 –

+0

是的,我打算髮表評論,並詢問他使用的編譯器。 –

+0

好吧,我這樣做,並得到了以下錯誤消息'cc name.c -o名稱 name.c:在函數'main'中: name.c:10:58:error:expected')'before';'token (「他們是你的名字中的%d個字母」,strlen(name);); ^ name.c:10:58:warning:格式'%d'需要'int'類型的參數,但參數2的類型爲'size_t'[-Wformat =] make:*** [name]錯誤1 ' – mrnatbus12

0

長度==的sizeof(名稱)

缺少 ';'在標識符'printf'之前。你應該在主函數中返回一個值。 (「你的名字的長度是%s」,長度);

%s是針對字符串的,您應該使用%d作爲int。