2015-10-21 29 views
2

我越來越想打印出一個字符數組用CGCC - 我應該如何正確格式化此字符串?分段錯誤

#include <stdio.h> 

void printLoop(char args[]) 
{ 
    char* p; 
    for (*p = *args; *p != '\0'; p++) 
    { 
    printf("%s", p); 
    } 
    getchar(); 
} 

int main() 
{ 
    char *text = "Test"; 
    printLoop(text); 
} 

我收到的時候分段錯誤:

Segmentation fault: 11 

我讀過它有什麼與我分配給陣列的空間很大,但我不明白爲什麼我會得到這個。

+4

將'printLoop'中的'for'更改爲'for(p = args; * p!='\ 0'; p ++)'。祝你好運。 –

+0

嘿,謝謝我設法在另一篇文章中弄明白,但現在我收到一個格式錯誤。它印刷「Testeststt」而不僅僅是「測試」。任何想法爲什麼? –

+0

您得到「Testeststt」,因爲您正在打印*以p *開始的字符串,而不是*由p *指向的字符。所以你打印「測試」,然後「est」,然後「st」,然後「t」。 – Beta

回答

4

當你寫*p = *args,你分配角色的價值指向argsp值,但是你有沒有分配p,所以你不能取消對它的引用。

您需要更改

for (*p = *args; *p != '\0'; p++) 

for (p = args; *p != '\0'; p++) 

指針args分配給指針p

這樣做後,如果您只打印​​,則無法在循環的每次迭代中打印由p指向的整個字符串。

您需要更改

printf("%s", p); 

printf("%c", *p); 

甚至

putchar(*p); 

因爲你要打印的人物指向由p,而不是指向的字符串p

3

分配char *p = args;,循環爲

while(*p != '\0') 

for(p = args, *p != '\0' ; p++) 

,改變printf("%s", *p);printf("%c", *p);,因爲你被char打印出來char之後。 不用說,如果在while循環中使用,則循環中增加p

您使用%s其用於一次打印一個字符串,所以在第一次迭代它印刷Test然後p被遞增,它印est等.. 需要打印由p一個char指出,一次一個char

相關問題