char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二个strcpy
没有错误,而第一个strcpy
有分段错误。我应该如何修改才能达到最初的目的?C使用strcpy分段错误错误
char** key;
strcpy(*key, "Hello");
strcpy(*(key+1), "World");
printf("%s", *key);
第二个strcpy
没有错误,而第一个strcpy
有分段错误。我应该如何修改才能达到最初的目的?C使用strcpy分段错误错误
你在做什么是未定义的行为。
char * strcpy (char * destination, const char * source)
strcpy预计可以修改的目的地。您正在传递一个char **
,由于您没有分配任何内存供您写入,因此导致了问题。
这是什么(也许)你正在尝试:
char* key = malloc(sizeof(char)*7); // 7 because it can Hold World with a Nul character
strcpy(key, "Hello");
strcpy((key+1), "World");
printf("%s", key);
你能解释一下多一点吗? –
'sizeof(char)'在这样使用时总是多余的,它被* C标准*定义为1. – hyde
您必须分配内存给你做strcpy()
之前,如果你想跳过分配内存试试strdup()
。
为了简化,不知道你真正想要char **key
,用char *key
char* key = malloc(sizeof(char) * 100); //allocate to store 100 chars
strcpy(key, "Hello");
strcpy(key + strlen(key), "World");
//or strcat(key, "World");
第二的strcpy没有错误做,而第一的strcpy具有分段故障
你如何知道第二个没有错误时,它从来没有执行,因为分段错误?
没有内存分配给key
。您可以在第一个strcpy
之前使用malloc
分配内存。
*key = malloc(32 * sizeof(char)); // pick a size of buffer
我怀疑第二个电话也会导致段错误。它(可能)会写入未分配的空间。
@ DennisMeng好点,我错误地读了代码。 – Steve
在代码中不清楚您是否为密钥分配了任何缓冲区。我相信这就是你得到赛格错误的原因。
呃。这是你的整个代码?你还没有初始化关键指向任何东西。因此,它是一个未初始化的指针,您正在解除引用char *以传递给strcpy。 – kfsone