我刚开始学C语言,现在想了解如何分配字符串。
我正在尝试创建一个名为
这是我目前的代码:
在
我不确定是否应该使用
当我尝试返回新副本时,出现以下情况:
由于以下原因:
我正在尝试创建一个名为
adding_string
的函数。它接受零个或多个字符串的数组,并在最后一个位置包含空值。然后,它会复制该数组,使其大小增加1,然后将字符串str
的副本附加到该数组中。最后,它会删除原始数组并返回新的副本。这是我目前的代码:
char **adding_string(char **array, const char *str)
{
size_t num = strlen(str) + 1;
char *final= (char *)malloc(num);
strncpy(final, str, num);
free(array);
//The above code would create a copy of the string "str".
//Then it puts that into the array.
//Not sure if free(array); would be the right method
//Having issues with returning final too
return final;
}
在
main
函数中,你会有类似以下的内容:char **array = NULL;
char **lines;
array = (char **)calloc(1, sizeof(char *));
array = adding_string(array, "help");
array = adding_string(array, "plz");
array = adding_string(array, "thanks");
for (lines = array; *lines; lines++)
{
printf("%s\n", *lines);
}
我不确定是否应该使用
free(array)
方法来删除原始数组,而且我在返回新副本时遇到了问题。当我尝试返回新副本时,出现以下情况:
warning: return from incompatible pointer type
由于以下原因:
return final;
str
。并且final
的类型是char*
,这就是为什么它会说“不兼容的指针类型” - 函数应该返回char**
。 - rain city'\0'
终止字节的技术。在这里,您使用了一个NULL
指针。在main
中的argv
就是以这种方式工作的,最后一个元素是NULL
。例如,execv
也要求这样做。 - Pablo