Конкатенация двух строк с использованием указателей, но не может работать - PullRequest
0 голосов
/ 05 марта 2019

Этот код хочет объединить 2 строки с помощью указателей, но он не может работать.Он работает только на 2 строки, а затем останавливается.

#include <stdio.h>

int main()
{
    int i = 0, j = a0;
    char *str1, *str2, *str3;

    puts("Enter first string");
    gets(str1);

    puts("Enter second string");
    gets(str2);

    printf("Before concatenation the strings are\n");
    puts(str1);
    puts(str2);

    while(*str1)
    {
      str3[i++] = *str1++;
    }
    while(*str2)
    {
      str3[i++] = *str2++;
    }
    str3[i] = '\0';
    printf("After concatenation the strings are\n");
    puts(str3);

    return 0;
}

Ответы [ 3 ]

0 голосов
/ 05 марта 2019
#include<stdio.h>
#include<stdlib.h>
    int main(){
      int i=0,j=0;
      char *str1,*str2,*str3;
      puts("Enter first string");
      str1=malloc(50*sizeof(char));
      str2=malloc(50*sizeof(char));
      str3=malloc(50*sizeof(char));
      gets(str1);
      puts("Enter second string");
      gets(str2);
      printf("Before concatenation the strings are\n");
      printf("%s\n",str1);
      printf("%s",str2);
      while(*str1){
          str3[i++]=*str1++;
      }
      while(*str2){
          str3[i++]=*str2++;
      }
      str3[i]='\0';
      printf("\nAfter concatenation the strings are\n");
      puts(str3);
      return 0;
    }

здесь я выделил память для указателей, чтобы ваш код работал нормально.

0 голосов
/ 05 марта 2019
#include <stdio.h>

void concatStr(char* str1,char* str2,char* str3){
    while(*str3++ = *str1++);
    str3--;
     while(*str3++ = *str2++);
}
int main()
{
 char str1[100],str2[100],str3[200];
 char *strp1,*strp2,*strp3;

 printf("enter str 1\t");
 scanf("%s",str1);
printf("enter str 2\t");
 scanf("%s",str2);

 printf("str1\t%s\n",str1);
 printf("str2\t%s\n",str2);

 concatStr(str1,str2,str3);
 printf("%s",str3);
    return 0;
}

Вы можете попробовать это ...

0 голосов
/ 05 марта 2019

gets () нуждается в буфере для помещения строки, но вместо этого вы передаете ей неинициализированный указатель.Также, как уже упоминалось, вы не должны использовать его в новом коде.fgets (str, len, stdin) будет делать то же самое, но не переполнять буфер.

пример:

#include <stdio.h>
#include <string.h>
int main()
{
    char str1[100], str2[100], str3[200];
    puts("Enter first string: ");
    fgets(str1, 100, stdin);
    puts("Enter second string: ");
    fgets(str2, 100, stdin);
    printf("Before concatenation the strings are\n%s\n%s\n", str1, str2);
    memset(str3, 0, 200);
    strncat(str3, str1, 200);
    strncat(str3, str2, 200);
    printf("After concatenation the strings are\n%s\n", str3);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...