Почему я получаю ненужные символы, когда конкатирую строку? - PullRequest
2 голосов
/ 20 июня 2011

Это мой код

    char *c[strlen(a) + strlen(b) + 2];
    strcat(c, a);
    strcat(c, "+");
    strcat(c, b);

Результирующая строка c имеет несколько ненужных символов в начале, за которыми следует объединенная строка. Что я сделал не так?

Ответы [ 5 ]

5 голосов
/ 20 июня 2011

Это должно быть:

char *c = malloc (sizeof (char) * (strlen (a) + strlen (b) + 2));
c[0] = '\0';
strcat(c, a);
strcat(c, "+");
strcat(c, b);

Причиной сбоя вашей процедуры является то, что вы сделали:

char *c[strlen(a) + strlen (b) + 2];

, которые объявляют c как массив указателей,а также не инициализировал массив с '\0'.Это должно быть похоже на

char c[strlen(a) + strlen (b) + 2];

Вы также должны инициализировать массив пустой строкой, так как strcat найдет '\0' во время объединения.

Обратите внимание, чтоНет проблем в выполнении при ошибке в char *c[strlen(a) + strlen (b) + 2];, так как каждое местоположение будет иметь длину 4 байта, поэтому массив может вместить в него символы.Но это не правильно.

4 голосов
/ 20 июня 2011

Если у вас нет инициализации c[0] = '\0';, strcat будет искать до первого '\0' перед вставкой в ​​c.

2 голосов
/ 20 июня 2011
char c[strlen(a) + strlen(b) + 2];
snprintf(c, sizeof(c), "%s+%s", a, b);
1 голос
/ 20 июня 2011

Вы объявляете массив указателей на символ (char *).Вам нужно объявить массив char:

char c[strlen(a) + strlen(b) + 2];
strcat(c, a);
strcat(c, "+");
strcat(c, b);
0 голосов
/ 20 июня 2011

Ваши ненужные символы взяты из c, вы определяете c, но он указывает на какое-то нежелательное значение, потому что вы их не инициализировали, присвойте первому символу c нулевое значение, я думаю, это должно решить вашу проблему ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...