2015-04-04 73 views
1
#include <stdio.h> 
#include <string.h> 
int main() { 
    char buf[100]; 

char *word1 = 'Holy'; 

char *word2 = 'Moly'; 
sprintf(buf,"%s %s", word1, word2); 
printf("%s\n", buf); 

} 

你好我正在嘗試使用sprintf,它編譯,但是當我運行它會給我分段錯誤(核心轉儲)或崩潰。C - 在sprintf和打印字符串時遇到問題

+1

單引號僅適用於單字符文字。 – teppic 2015-04-04 02:32:54

+0

我很抱歉浪費你的時間傢伙....我認爲這是一個雙引號...我有一個4K顯示器,所以有些東西是小...我道歉! – LearningCODE 2015-04-04 02:49:26

+2

注意編譯器警告/錯誤消息 – 2015-04-04 02:50:56

回答

2

你缺少了雙引號爲char*

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

int main() { 
    char buf[100]; 
    char *word1 = "Holy"; 
    char *word2 = "Moly"; 
    sprintf(buf,"%s %s", word1, word2); 
    printf("%s",buf); 
} 

編輯:不要忘了用gcc -Wall顯示所有的警告,發現更容易這些錯誤! :d

+1

總是用選項-Wall編譯來查看所有的警告 – Darwin57721 2015-04-04 02:34:38

+0

其實你也可以用printf來做,它對我很有用,但我總是用puts來代替。只需將單引號改爲雙引號。 – Darwin57721 2015-04-04 02:39:47

+0

爲什麼你會推薦'把'放在'printf'上? – 2015-04-04 02:54:06

1

儘量固定這些行:

char *word1 = 'Holy'; 
char *word2 = 'Moly'; 

到:

char *word1 = "Holy"; 
char *word2 = "Moly"; 

這是因爲單引號僅與單個字符不是一個字符串值使用。 請務必注意編譯器警告,特別是在處理指針時。如果編譯器警告未啓用,請嘗試啓用它們,解釋爲Darwin57721。

+0

歡迎來到堆棧溢出。請儘快閱讀[關於]頁面。您的回答是正確的,但您可以採取一些改進措施。一個是壓縮它;顯示彼此相鄰的兩條故障線路,然後顯示兩條固定線路。另一個是解釋一下舊版本出了什麼問題,以及爲什麼新版本是正確的。最好的答案還將討論注意編譯警告,請求幫助時報告任何未解決的警告,並推薦使用GCC的'-Wall'等選項以更迅速地發現問題。 – 2015-04-04 03:56:57

+0

對不起,我更新了我的答案。這是我的第一個答案,所以非常感謝反饋。 – 2015-04-05 01:37:02

+0

沒什麼值得遺憾的 - 你正在學習,就像我們以前一樣。 – 2015-04-05 01:39:18