[英]storing 2D char array created in a function
我试图在一个函数中创建二维数组并保留它以供以后使用。 我有这个:
char **add_to_list(char *str) {
char list[4][7];
int i = 0;
while (i < 4) {
if (i == 1) {
strcpy(list[i], str);
}
else {
strcpy(list[i], "diff_str");
}
i++;
}
return list;
}
int main() {
char **list[4][7];
char *str = "string";
**list = add_to_list(str);
}
但是当 add_to_list 返回时,列表不是我所期望的
尝试这个。 我简化了它,因为您使用的是静态分配的矩阵。 我还指出 else 子句中添加的新字符串大于 7。例如。 "diff_str"
。 它的 8 个字符加上 1 个用于 NULL 终止字节。 结果,我将您的静态分配大小从 7 调整为 9。祝您继续学习 C 语言顺利。
void add_to_list(char ppList[4][9], char *str) {
int i = 0;
while (i < 4) {
if (i == 1) {
strcpy(ppList[i], str);
}
else {
strcpy(ppList[i], "diff_str"); // this string is 9 chars when
// counting NULL terminating byte
}
i++;
}
}
int main() {
// adjusted size of bytes used to hold string
char list[4][9] = {"one", "two", "three", "four"};
char *str = "string";
printf("str is %s\n", str);
printf("list[0] is %s\n", list[0]);
printf("list[1] is %s\n", list[1]);
printf("list[2] is %s\n", list[2]);
printf("list[3] is %s\n", list[3]);
add_to_list(list, str);
printf("list[0] is %s\n", list[0]);
printf("list[1] is %s\n", list[1]);
printf("list[2] is %s\n", list[2]);
printf("list[3] is %s\n", list[3]);
}
运行时看起来像这样:
str is string
list[0] is one
list[1] is two
list[2] is three
list[3] is four
list[0] is diff_str
list[1] is string
list[2] is diff_str
list[3] is diff_str
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.