我试图使用strncpy
,然后是strcpy
,反之亦然,但我在运行时不断收到分段错误。我认为这是因为函数中存在逻辑错误,但我切换了他们的位置,只有第一个执行。调用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);
}
尝试与'-g'标志和使用的valgrind编译而执行程序:'的valgrind/a.out' =>你会得到更多的信息 – YaatSuka
'的char * string_copy1,* string_copy2;'没有。初始化这些变量之一。所以他们都没有指向有效的内存位置。然后你使用str(n)cpy来覆盖一个字符数组的内容 - 也就是一个“字符串” - 但是你给它的指针并不指向这样一个数组。因此,未定义的行为随之而来。 – rici
在使用它们之前,您需要初始化'string_copy1'和'string_copy2;'。使用malloc了解如何在这里http://en.cppreference.com/w/c/memory/malloc –