我正在学习阵列,并想知道是否有人可以帮助我。我有一个字符串数组,需要创建一个新的字符串,它是所有数组元素的串联。我遇到的问题是我只能在我的阵列中打印第一个字符串,而不是所有字符串。我知道我的数组中每个字符串的末尾都有一个null,那么我该如何解决这个问题呢?也许2D阵列?顺便说一下,我不允许使用string.h中的任何字符串操作函数。谢谢。
#include <stdio.h>
#include <stdlib.h>
int findLength(char array[])
{
int i = 0;
for (i = 0; array[i] != '\0'; i++)
{
}
return i;
}
void arrayToString(char string[])
{
int n = 0;
int i = 0;
int l = findLength(string);
char *finalString;
finalString = malloc(l * sizeof(char));
for (i = 0; string[i] != '\0'; i++) {
finalString[n] = string[i];
n++;
}
for (i = 0; finalString[i] != '\0'; i++) {
printf("%c", finalString[i]);
}
}
int main(int argc, const char * argv[])
{
char *color[] = { "red", "blue", "red" };
arrayToString(*color);
return 0;
}
答案 0 :(得分:0)
您的代码中存在多个问题,以下是带注释的修复版本:
size_t findLength(char* array[]) {
size_t l = 0;
while (char *t = *array++)
while (*t++)
l++;
return l;
}
void copyAll(char* array[], char* out) {
while (char *t = *array++)
while (*t)
*out++ = *t++; // copy every symbol from every line into out string
*out = '\0'; // append last null-terminator
}
void arrayToString(char* array[]) {
char* finalString = malloc((findLength(array) + 1) * sizeof(char)); // allocate + 1 symbol for null terminator
copyAll(array, finalString);
printf("%s", finalString);
free(finalString); // don't forget to release memory
}
int main(int argc, char* argv[]) {
char* color[] = { "red", "blue", "red", 0 }; // you should add array terminator as well
arrayToString(color);
return 0;
}
答案 1 :(得分:0)
将函数arrayToString
更改为有两个参数。类型为char **
,第二个类型为size_t
,用于定义字符串数。还要将其返回值设为{{1返回指向已分配内存的指针。最后不要忘记释放内存。
char *