繁体   English   中英

调用strcpy时出现分段错误

[英]Segmentation fault when calling strcpy

我试图先使用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);
}

参见文档

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

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

char *string_copy1, *string_copy2;

因此,指针包含一些垃圾值。 并且strcpy()写入不属于您的程序的内存。 这会导致分割错误

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

必须使用零填充它们,以避免strncpy()出现问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM