2015-10-21 63 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

相关问题