1

我是 C 编程新手。我在
尝试打印字符串时遇到分段错误(核心转储)。请帮忙。

#include <stdio.h>
#include <string.h>
int main()
{
  char *ptr;
  strcpy(ptr, "mystring");
  printf( "%s\n", ptr);
 return 0;
}
4

2 回答 2

7

您还没有为指针指向的内存分配任何内存。

char array[MAX_LEN + 1];

char *ptr = array;

strncpy(ptr, "Cadence", MAX_LEN);
ptr[MAX_LEN] = '\0';

printf( "%s\n", ptr);

请注意,这strncpy() 可能是一种更安全的复制字符串的方法,因为我们指定了要复制的最大字符数,这使得超出字符串和“乱写”内存变得更加困难。

更新以回应评论:我已经更改了上面的代码以使用更安全的模式。您可能还想调查strlcpy()(非标准库)。

于 2013-02-12T06:30:53.753 回答
1

当您声明 时char *ptr;,您为指向 char 的指针分配内存。但是如果你想在 char 里面放一个字符串,它就会溢出。

因此,您必须为您的字符串分配内存:

字符 str[1024]; // 这是您可以放入 str 的最大字符串长度。

此外,不要忘记\0终止每个字符串且大小为一个字符的空终止符 ( )

于 2013-02-12T14:38:46.943 回答