我有一個「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只有一個指向數組的指針,而不是數組本身。 –
對,你好,謝謝! –