c - C 中带有字符串的双指针/使用 malloc 指向数组的指针

标签 c arrays string pointers free

有人可以向我解释为什么我的输出中缺少第一个指针 (stringarray[0]) 以及如何解决它。我还想知道如何释放所有 malloc 指针的内存。

int main(int argc, char **argv) {

[...]

char ** stringarray;
if (( stringarray = (char **)malloc(counter*sizeof(char)))== NULL){exit(0);}

int k = 0;
for (i = 0; i < len; i =i+1){
    if((strcmp(countries, districts[i]) == 0) && ( argvIntPeoplelimit <= people[i])) {
        if (( stringarray[k] = (char * ) malloc(100*sizeof(char)))== NULL){exit(0);}

        snprintf(stringarray[k],100,"The Country %s has %d people.",countries[i],people[i]);
        printf("%d %d %s %s %d\n",i,k,stringarray[k], countires[i],people[i] ); //here stringarray[k] k==0 has a value
        k=k+1;
    }  
}
write_file(stringarray,counter);
for (int f = 0; f < k; ++f)
{
    // if i call stringarray[0] nothing shows up


    //ERROR can't free(stringarray);

}
    return 0;
}

我不知道如何用字符串构建结构指针,使我能够将数据处理到 write_file 函数的“char *result[]”。

void write_file(char *result[], int len);

非常感谢任何帮助、技巧和提示!谢谢!

最佳答案

我相信这是为字符串数组分配内存的正确方法:

// number of pointers/strings; don't have to cast the result of malloc
char** stringArray = malloc(sizeof(char*) * 2);

// allocate however many chars for each pointer
for(i = 0; i < 2; ++i)
    stringArray[i] = malloc(sizeof(char) * 10);

strcpy(stringArray[0], "Hello");
strcpy(stringArray[1], "world!");

printf("%s %s\n", stringArray[0], stringArray[1]);

要释放上述内容,您可以这样做:

for(i = 0; i < 2; ++i)
    free(stringArray[i]);

free(stringArray);

关于c - C 中带有字符串的双指针/使用 malloc 指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53001732/

相关文章:

c - 防止 __start 入口点被优化掉

c - 为什么使用回调而不是普通的函数调用?

c# - 连接数组中所有字符串并用空格分隔的有效方法是什么?

java - java中只打印重复的单词

c - 初始化未知大小的二维数组

c - 如何为未知长度的输入字符串分配内存?

javascript - 使用 JavaScript 查找字符串中的某些数据

线程可以在接收到条件信号时唤醒但不能同时获得互斥锁

c++ - 会终止 Linux 进程,停止它在 Oracle 数据库中的查询作业吗?

C:二维数组是如何工作的?