У strcat + strlen странное поведение - PullRequest
0 голосов
/ 09 сентября 2018

ребята, я хочу найти причину, почему этот 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.

1 Ответ

0 голосов
/ 09 сентября 2018

Если все части аргументов командной строки хороши, вы должны увеличить размер comando[], так как этого недостаточно для того, чтобы содержать часть конкатенации.

Его размер должен быть как минимум равен strlen(comando) + strlen(navegador) + 1.

Когда я увеличиваю размер comando до (скажем) 200 , тогда получается: command is: "C:\Program Files\Mozilla Firefox\firefox.exe

...