在字符串连接中没有获得所需的输出

时间:2015-11-24 13:15:05

标签: c string

**这是我的代码,我没有得到预期的结果,因为输出能够打印第一个字符串和连接而不是第二个字符串

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[30],str2[30];
    printf("Enter Srting 1:");
    gets(str1);
    printf("Enter string 2: ");
    gets(str2);
    concat(&str1,&str2);
    printf("New string is: %s",str1);
    return 0;
}
void concat(char* str1,char* str2)
{
    int i,j;
    i=j=0;
    while(str1[i]!='\0')
    i++;
    while((str1[i++]=str2[j++]!='\0'))
    ;
}

3 个答案:

答案 0 :(得分:2)

替换

while((str1[i++]=str2[j++]!='\0'))

通过

while( (str1[i++] =str2[j++]) != '\0)

concat(&str1,&str2);

通过

concat(str1, str2);

答案 1 :(得分:2)

首先,函数gets不安全,不再受C标准支持。因此,最好使用scanf指定fgets功能的输入数据的宽度

然而,该功能可以采用以下方式

char * concat( char* str1, const char* str2 )
{
    int i,j;
    i=j=0;
    while( str1[i]!='\0' ) i++;
    while( ( str1[i++] = str2[j++] ) !='\0' );

    return str1;
}

或者你可以写

    while( ( str1[i++] = str2[j++] )  );

没有括号表达

( str1[i++] = str2[j++] !='\0' )

相当于

( str1[i++] = ( str2[j++] !='\0' ) )

该函数应该像

一样调用
concat( s1, s2 );

答案 2 :(得分:1)

您的函数concat代码不正确:

while((str1[i++]=str2[j++]!='\0'))

应该是

while ((str1[i++] = str2[j++]) !='\0')

你应该总是在二元运算符周围使用空格来提高可读性!

此外,concat应在使用前声明或定义,并应以concat(str1, str2);作为str1调用,str2为数组。

使用gets()是不明智的,因为它可能导致缓冲区溢出,尤其是在从外部源接收输入时。