【问题标题】:I am getting a segementation Error in pointer when i try to print a string using char * it,why? [closed]当我尝试使用 char * it 打印字符串时,指针中出现分段错误,为什么? [关闭]
【发布时间】:2021-11-13 01:36:51
【问题描述】:

我正在尝试使用存储字符串 char *p,*s;:

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

到目前为止它有效,但是当我在 s 上调用 printf 时,它给了我一个分段错误。 我不知道为什么。谁能解释一下?我正在使用 linux 和 gcc。

【问题讨论】:

  • 您是否为ps 分配了内存空间?
  • 我很惊讶scanfs 没有导致崩溃。

标签: c string pointers printf


【解决方案1】:

在这种情况下,p 和 s 是未初始化的指针;他们没有指向任何有效的记忆。您必须为它们分配内存来指向。请参阅下面的示例。

char* p = malloc(10); // allocate 10 bytes and point p to them
char* s = malloc(10); // allocate 10 bytes and point s to them
scanf("%s", p);
scanf("%s", s);
printf("%s\n", p);

// free the memory when you don't need it anymore
free(p);
free(s);

如果您希望放入 p 和 s 的数据大于 10 个字节,请分配更多。

【讨论】:

  • 好吧,我们不知道他们实际上是NULL。它们的值是不确定的。但你是对的。它们没有指向任何有效的内存。
  • 请记住,C 字符串是以 null 结尾的:它们以设置为 '\0' 的字节结束,以指示它们的结束。如果你的字符串有 10 个字符长,你实际上需要分配 11 个字节。
  • 我想如果我能够使用 *p 来存储字符串而不分配 ,那么使用 *s 但它不能使用 *s 第二个指针。无论如何,谢谢你的信息。
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2020-10-02
  • 2021-11-21
  • 2020-03-28
  • 2020-03-26
  • 2022-11-16
  • 2016-09-01
相关资源
最近更新 更多