gpt4 book ai didi

c - 夹板: "Value strings[] used before definition"带动态数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:40 26 4
gpt4 key购买 nike

我在 C 中使用动态字符串数组:

char** strings;

我初始化它:

int max = 10;
strings = malloc(sizeof(char*) * max);

然后复制几个虚拟字符串:

char* str = "dummy";
for (int i = 0; i < max; i++) {
strings[i] = malloc(strlen(str) + 1);
strncpy(strings[i], str, strlen(str) + 1);
}

然而当我尝试打印这个时:

for (int i = 0; i < max; i++)
printf("array = %s", strings[i])

我从 Splint 得到这个错误:

Value strings[] used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)

像这样检查 NULL 将无济于事:

for (int i = 0; i < max; i++)
if (strings[i] != NULL)
printf("array = %s", strings[i])

因为 strings[i] 仍然在“定义前”使用。

关于如何解决这个问题有什么想法吗?

编辑:我认为将尝试使用链表代替。

另外,完整的代码 list :

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
char** strings;
int i;
int max = 10;
char* str = "hello";

// Dynamic array with size max
strings = malloc(sizeof(char*) * max);

// Abort if NULL
if (strings == NULL)
return (-1);

// Define strings
for (i = 0; i < max; i++)
{
strings[i] = malloc(strlen(str) + 1);

// Abort if NULL
if (strings[i] == NULL)
{
// Undetected memory leak here!
free(strings);
return (-1);
}

strncpy(strings[i], str, strlen(str) + 1);
}

// Print strings
for (i = 0; i < max; i++)
{
if (strings[i] != NULL)
printf("string[%d] = %s\n", i, strings[i]);
}

// Free strings
for (i = 0; i < max; i++)
{
if (strings[i] != NULL)
free(strings[i]);
}
free(strings);

return 0;
}

最佳答案

我的机器上没有夹板,所以我无法用它进行测试,这只是您完成任务的另一种方式:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
int i, len, max;
char* str = "hello";

len = strlen(str) + 1;
max = 10;

char strings[max][len];

for (i = 0; i < max; i++) {
strcpy(strings[i], str);
}

for (i = 0; i < max; i++) {
printf("string[%d] = %s\n", i, strings[i]);
}

return 0;
}

关于c - 夹板: "Value strings[] used before definition"带动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25325588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com