我有一个“NULL
- 终止数组- 终止字符串”的数组。这由char **args
给出。将数组平铺到字符串中
我可以使用args[0]
,args[1]
等访问单个元素。我想要整个数组并将所有元素拼合成一个字符串。如果数组包含:
args[0] = "abc"
args[1] = "def"
我希望得到的字符串是:
abcdef
我试图通过所有元素循环和连接它们放在一起这样做,但我不知道该怎么告诉我什么时候到达阵列的末尾,因为sizeof()
不起作用。
我有一个“NULL
- 终止数组- 终止字符串”的数组。这由char **args
给出。将数组平铺到字符串中
我可以使用args[0]
,args[1]
等访问单个元素。我想要整个数组并将所有元素拼合成一个字符串。如果数组包含:
args[0] = "abc"
args[1] = "def"
我希望得到的字符串是:
abcdef
我试图通过所有元素循环和连接它们放在一起这样做,但我不知道该怎么告诉我什么时候到达阵列的末尾,因为sizeof()
不起作用。
我有一个“以NULL结尾的字符串以NULL结尾的数组”。
该数组以NULL
结尾,即只要args[i] == NULL
您停止迭代。
作为您的array is null terminated,您知道在获取NULL元素时已达到数组的末尾。
if (args[i] == NULL){
//DONE
}
如果你想获得数组args来,你可以遍历它,直到你得到一个空的长度,计算迭代次数:
int length_of_args = 0;
while (args[length_of_args] != NULL){
length_of_args++;
}
有人张贴了类似的问题Copy argv to string in C(newbie question)与你可能会发现一些有用的答案。
您可以使用sprintf
连接2个字符串。您需要控制新字符串的大小。类似的东西:
int main()
{
char* s1 = "abc";
char *s2 = "def";
char* snew = (char *)malloc (strlen (s1) + strlen (s2) + 1);
sprintf (snew, "%s%s", s1, s2);
printf ("%s\n", snew);
return EXIT_SUCCESS;
}
您正在寻找这样的事情:
char* concat_string_array(char** input)
{
int i, len;
char* result;
len = 1;
for (i=0; input[i]; i++)
len += strlen(input[i]);
result = malloc(len);
result[0] = '\0';
for (i=0; input[i]; i++)
result = strcat(result, input[i]);
return result;
}
的关键部分,我相信你缺少的是,该阵列由NULL
进入终止。这就是for循环中的测试检查。
在C99:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char* args[] = { "hello", "my", "world", NULL};
size_t str_size = 0;
char** args_itr = args;
/* calculate resulting size */
while(*args_itr != NULL) {
str_size += strlen(*args_itr);
args_itr++;
}
char result[str_size+1];
result[str_size] = '\0'; // protect against 0 size
args_itr = args;
char* result_ptr = result;
while(*args_itr != NULL) {
strcpy(result_ptr, *args_itr);
result_ptr += strlen(*args_itr);
args_itr++;
}
/* if you use it in a lib function you could do */
// return strdup(result);
printf("%s\n", result);
return 0;
}
'sizeof'将决定数组的大小,但只有当你真正给它的阵列。问题是OP只有一个指向数组的指针,而不是数组本身。 –
对,你好,谢谢! –