C:使用printf时出现分段错误

Ham*_*mza 6 c printf pointers segmentation-fault

这可能很简单,但我似乎无法让它工作.

我有这个非常简单的代码片段:

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

int main(void)
{

  char buf[100];
  char *p = buf;

  strcpy(p, "Test string");

  printf("%s\n", *p);

}
Run Code Online (Sandbox Code Playgroud)

当我运行它时会导致分段错误.GDB输出:

Program received signal SIGSEGV, Segmentation fault.
0xb76af3b3 in strlen () from /lib/i686/cmov/libc.so.6
Run Code Online (Sandbox Code Playgroud)

但我仍然没有得到它.

评论将不胜感激,谢谢.

Il-*_*ima 13

当你写作

printf("%s\n", *p);
Run Code Online (Sandbox Code Playgroud)

*p将在值p[0]是一个字符.然而,printf正在寻找一系列字符,从而导致它出现段错误.请记住,在C中,字符串只是字符数组,而数组实际上是指向第一个元素的指针,这就是您不需要取消引用的原因.

要解决此问题,请删除*以获取:

printf("%s\n", p);
Run Code Online (Sandbox Code Playgroud)


zil*_*n01 10

你将一个角色传递给printf; 你应该传递指针.

char buf[100];
char *p = buf;

strcpy(p, "Test string");

printf("%s\n", p);     // p, not *p
Run Code Online (Sandbox Code Playgroud)

  • 当你传递`*p`时,你只按值传递一个字符.当您传递`p`时,您将指向字符串中的第一个字符,因此printf可以访问字符串的其余部分. (2认同)