Конкатенация строк с использованием указателей в C! - PullRequest
0 голосов
/ 11 июля 2011

Я написал следующий код для конкатнации строк, используя указатели в C

#include<stdio.h> 
#include<stdlib.h>
#include<string.h>
void strCat(char *str1,char *str2);
int main(void)
{
char str1[] = "Rohit";
char str2[] = "Kumar";  
strCat(str1,str2);
return 0;
}

void strCat(char *str1,char *str2)
{
int i;
char *start;
start = str1;
printf("%s",str1);
while(*str1++ != '\0')
    continue;
while(*str2 != '\0')
    *str1++ = *str2++;
*str1 = '\0';

printf("%s\n",str1);
}

Почему выходной сигнал равен Rohit(null). Пожалуйста, помогите !!

Ответы [ 5 ]

5 голосов
/ 11 июля 2011

Ну, во-первых, str1 недостаточно для размещения обеих строк.

Здесь

while(*str2 != '\0')
    *str1++ = *str2++; /* You are overstepping str1 -> undefined behavior */

Есть другие проблемы с кодом. Возможно, вам стоит попробовать string.h strcat вместо

1 голос
/ 11 июля 2011
while(*str1++ != '\0')
    continue;
while(*str2 != '\0')
    *str1++ = *str2++;

В первом цикле вы выполняете цикл до *str==0. И когда это, наконец, произойдет, вы все равно увеличиваете str1, оставляя '\0', как было.

Это более правильно:

while(*str1++ != '\0');
--str1;
while(*str2 != '\0')
    *str1++ = *str2++;
1 голос
/ 11 июля 2011

Вы изменяете указатель str1, устанавливаете его в конце на «\ 0» и затем печатаете NULL. Я думаю, что это то, что вам нужно:

void strCat(char *str1,char *str2)
{
int i;
char *start;
printf("%s",str1);
while(*str1++ != '\0')
    continue;
start = str1;
while(*str2 != '\0')
    *str1++ = *str2++;
*str1 = '\0';

printf("%s\n",start);
}

Кроме того, как заметил кто-то еще, str1 недостаточно велик, чтобы вместить обе строки.

0 голосов
/ 21 июня 2013

Когда вы печатаете str1, он будет иметь нулевое значение, поскольку вы увеличили указатель str1 до конца и сохранили нулевое значение.

когда вы печатаете str1, он указывает на ноль, поэтому печатает ноль

0 голосов
/ 11 июля 2011

Ты делаешь опасную вещь.str1 и str2 являются массивами фиксированного размера, а str1 не имеет достаточно места для содержимого, которое вы копируете в него.Результат приводит к неопределенному поведению.

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