我有一个数组是“ NULL
- 终止的NULL
数组 - 终止字符串”。这由char **args
给出。
我可以使用args[0]
,args[1]
等访问单个元素。我想获取整个数组并将所有元素展平为字符串。如果数组包含:
args[0] = "abc"
args[1] = "def"
我想要一个结果字符串:
abcdef
我尝试通过遍历所有元素并将它们连接在一起来做到这一点,但我不知道如何告诉我何时到达数组的末尾,因为sizeof()
不起作用。
答案 0 :(得分:4)
我有一个数组是“以NULL结尾的以NULL结尾的字符串数组”。
数组以NULL
结尾,只要您args[i] == NULL
停止迭代。
答案 1 :(得分:2)
当你得到一个NULL元素时,你知道你已经到达了数组的末尾。{/ p>
if (args[i] == NULL){
//DONE
}
如果你想获得数组args的长度,你可以循环遍历它,直到得到一个null,计算迭代次数:
int length_of_args = 0;
while (args[length_of_args] != NULL){
length_of_args++;
}
有人发布了类似的问题array is null terminated,其中包含一些您可能会发现有用的答案。
答案 2 :(得分:1)
你正在寻找这样的东西:
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循环中的测试。
答案 3 :(得分:0)
您可以使用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;
}
答案 4 :(得分:0)
在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;
}