c - 在 C 中使用 strdup。这里出了什么问题

标签 c

<分区>

我正在尝试编译以下 C 代码:

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


char *argv[] = {"v1.0", "v2.0", "v3.0"};

int main(void)
{
    char *VER_LIST[] = {0};
    int i;

    /*for(i = 0; i<3; i++)
    {
        VER_LIST[i] = strdup(argv[i]);
    }   
    VER_LIST[i] = NULL;*/

    VER_LIST[0] = strdup(argv[0]);
    VER_LIST[1] = strdup(argv[1]);
    VER_LIST[2] = strdup(argv[2]);
    VER_LIST[3] = NULL;

    printf("%s", VER_LIST[2]);
    return 0;

}

它显示正确的输出为 v3.0,但是如果我注释这部分代码

VER_LIST[0] = strdup(argv[0]);
VER_LIST[1] = strdup(argv[1]);
VER_LIST[2] = strdup(argv[2]);
VER_LIST[3] = NULL;

并使用 for 循环代替它向我显示了错误的结果。为什么我使用 for 循环会得到错误的结果?请帮忙。谢谢。

最佳答案

数组 char *VER_LIST[] = {0}; 只有一个元素,你不能在 VER_LIST[1] 及以上写任何东西,否则你会调用未定义的行为

首先分配足够的空间,如char *VER_LIST[4] = {0};

关于c - 在 C 中使用 strdup。这里出了什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38814942/

相关文章:

c++ - -fPIC 忽略目标(所有代码与位置无关),无用警告

c - BitBlt 绘制黑色方 block (Windows 7)

c - 如何将无符号字符数组解释为十六进制数组?

如果我使用 SAL,是否可以删除 NULL 和边界检查?

c - 这个函数有什么问题吗?

c - Arduino 代码不处理串行输出

C: 由 popen() 函数执行的 Linux 命令不显示结果

c++ - 为什么 C++ 中的字符串通常以 '\0' 结尾?

c - 找出C中矩阵中奇数列之和与偶数行之和的差异

将结构指针转换为另一个结构