调用strcpy时出现分段错误

时间:2017-10-05 22:59:22

标签: c segmentation-fault strcpy strncpy

我尝试使用strncpy然后使用strcpy,反之亦然,但我在运行时遇到了分段错误。我认为这是因为函数中存在逻辑错误,但我改变了它们的位置,只有第一个会执行。

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

int main(void)
{
    char c = ' ', sentence[50], *pointer_to_string;
    pointer_to_string = &sentence[0];
    int index = 0;

    printf("Please enter a sentence:");
    while ((c = getchar()) != '\n')
    {
        sentence[index] = c;
        index++;
    }
    sentence[index] = '\0';

    char *string_copy1, *string_copy2;

    strncpy(string_copy1, pointer_to_string, 5);
    printf("strncpy(string_copy1, pointer_to_string, 5):\n");
    printf("%s\n", string_copy1);

    strcpy(string_copy2, pointer_to_string);
    printf("strcpy(string_copy2, pointer_to_string):\n");
    printf("%s\n", string_copy2);
}

1 个答案:

答案 0 :(得分:3)

请参阅documentation

char *strcpy(char *dest, const char *src);

第一个参数是指向目标缓冲区的指针。但你的指针没有初始化:

char *string_copy1, *string_copy2;

因此,指针包含一些垃圾值。 strcpy()写入不属于您程序的内存。它会导致segmentation fault

待办事项

char string_copy1[50] = { 0 };
char string_copy2[50] = { 0 };

使用零填充它们是必要的,以避免strncpy()

出现问题
  

如果n的前src个字节中没有空字节,则放在dest中的字符串将不会以空值终止。