почему strcat работает странно в цикле? - PullRequest
0 голосов
/ 18 марта 2019

Я хочу иметь символы 'ab' для каждого элемента в таблице, но в консоли у меня есть это:

tab[0] = argvab
tab[1] = argvabab
tab[2] = argvababab
tab[3] = argvabababab

Это часть моего кода:

char **tab = (char**)malloc((n) * sizeof(char*));
for (int i = 0; i < n; i++) {
    tab[i] = argv[1];
    strcat(tab[i], "ab");
    printf("tab[%d] = %s\n", i, tab[i]);
}

1 Ответ

2 голосов
/ 18 марта 2019
tab[i] = argv[1];
strcat(tab[i], "ab");

Вы не можете добавлять вещи в строки argv.Это блоки фиксированного размера без дополнительного пространства.Добавление вызывает неопределенное поведение.

Также, даже если бы вы могли добавлять каждый раз argv[1] вместо argv[i].

Решение: (a)Измените argv[1] на argv[i] и (b) скопируйте каждый аргумент перед его добавлением.

...