GCC-如何正确格式化此字符串?分段错误
我在尝试用C打印字符数组时遇到了一个分段错误GCC-如何正确格式化此字符串?分段错误,c,arrays,pointers,gcc,segmentation-fault,C,Arrays,Pointers,Gcc,Segmentation Fault,我在尝试用C打印字符数组时遇到了一个分段错误 #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); } 我已经读到,这与我为数组分配了大量空间有
#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);
}
我已经读到,这与我为数组分配了大量空间有关,但我真的不明白为什么会这样。当您编写
*p=*args
时,您将args
指向的字符的值分配给p
的值,但您没有分配p
,所以你不能取消对它的引用
你需要改变
for (*p = *args; *p != '\0'; p++)
printf("%s", p);
到
将指针args
分配给指针p
这样做之后,如果您只想打印“Test”
,那么就不能在循环的每个迭代中一直打印p
指向的整个字符串
你需要改变
for (*p = *args; *p != '\0'; p++)
printf("%s", p);
到
甚至
putchar(*p);
由于在编写
*p=*args
时,您希望打印p
指向的字符,而不是p指向的字符串,因此您将args
指向的字符的值指定给p
的值,但您尚未指定p
,因此无法取消引用它
你需要改变
for (*p = *args; *p != '\0'; p++)
printf("%s", p);
到
将指针args
分配给指针p
这样做之后,如果您只想打印“Test”
,那么就不能在循环的每个迭代中一直打印p
指向的整个字符串
你需要改变
for (*p = *args; *p != '\0'; p++)
printf("%s", p);
到
甚至
putchar(*p);
因为您希望在分配char*p=args后打印p
指向的字符,而不是p
指向的字符串代码>,循环为
while(*p != '\0')
或
和更改printf(“%s”,*p)代码>到printf(“%c”,*p)
,因为您正在通过char
打印它。
不用说,如果在while
循环中使用,则在循环中增加p
您使用的是一次打印字符串的%s
,因此在第一次迭代时它打印Test
,然后p
递增,它打印est
,依此类推。。
您需要打印一个由p
指向的char
,一次打印一个char
赋值后字符*p=args代码>,循环为
while(*p != '\0')
或
和更改printf(“%s”,*p)代码>到printf(“%c”,*p)
,因为您正在通过char
打印它。
不用说,如果在while
循环中使用,则在循环中增加p
您使用的是一次打印字符串的%s
,因此在第一次迭代时它打印Test
,然后p
递增,它打印est
,依此类推。。
您需要打印一个由p
指向的char
,一次打印一个char
将printLoop
中的for
更改为for(p=args;*p!='\0';p++)
。祝你好运。嘿,谢谢。我在另一篇文章中找到了答案,但现在我收到了一个格式错误。它打印的是“testestt”,而不仅仅是“Test”。你知道为什么吗?你会得到“testestt”,因为你打印的是以p开头的字符串,而不是p指向的字符。因此,打印“Test”,然后是“est”,然后是“st”,然后是“t”。将printLoop
中的更改为(p=args;*p!='\0';p++)
。祝你好运。嘿,谢谢。我在另一篇文章中找到了答案,但现在我收到了一个格式错误。它打印的是“testestt”,而不仅仅是“Test”。你知道为什么吗?你会得到“testestt”,因为你打印的是以p开头的字符串,而不是p指向的字符。所以你打印“Test”,然后是“est”,然后是“st”,然后是“t”。