почему strcat странно работает в цикле?

#c #loops #strcat

#c #циклы #strcat

Вопрос:

Я хочу иметь символы ‘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] = %sn", i, tab[i]);
}
  

Ответ №1:

 tab[i] = argv[1];
strcat(tab[i], "ab");
  

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

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

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