c - strcat + strlen 有奇怪的行为

标签 c strlen strcat

伙计们,我想找到这个 strcat (或 strlen)出现此问题的原因:

当我写的时候:

int main(int argc, char* argv[])
{
    if(argv[1] != '\0')
    {
        const char* navegador = "C:\\Program Files\\Mozilla Firefox\\firefox.exe ";
        const char* puerto  = "localhost:80/";
        char* archivo   = argv[1];

            char comando[2] = "\"";
            strcat(comando,navegador);
            int size = strlen(comando);         // ISSUE UNCOMMENTED!

        printf("command is: %s\n",comando);
    }
    else
    {
        printf("is null!\n");
    }
    return 0;
}

它的输出是:

D:\camil\Documents\mis_documentos\configs\sublime_text>program.exe someOption
command is: "C:\.

当我评论问题声明时,它的输出是:

D:\camil\Documents\mis_documentos\configs\sublime_text>program.exe someOption
command is: "C:\Program Files\Mozilla Firefox\firefox.exe"

为什么strlen会改变输出,看来strlen会影响strcat的行为。

最佳答案

如果所有命令行参数部分都很好,您应该增加 comando[] 的大小,因为它不足以包含连接部分。

它的大小应至少等于strlen(comando) + strlen(navegador) + 1

当我将 comando 的大小增加到(例如)200 时,输出为:命令为:“C:\Program Files\Mozilla Firefox\firefox.exe

关于c - strcat + strlen 有奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52243402/

相关文章:

c - 需要 strlen 帮助

C-单词列表问题的 strlen() 中的段错误

c++ - 使用字符数组写入姓名的首字母

c - 将指针传递给 strcat 不会更新字符串

c - 传递 ‘strcat’ 的参数 2 使指针来自整数而不进行强制转换 [-Wint-conversion]

c - 为另一个架构重建 Linux 内核模块

c - 如何访问结构体内部数组的指针?

c - 没有阻塞线程

c - 使用 strcat 时添加的随机空格

c - ZLib 和 memcpy