**这是我的代码,我没有得到预期的结果,因为输出能够打印第一个字符串和连接而不是第二个字符串
#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'))
;
}
答案 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()
是不明智的,因为它可能导致缓冲区溢出,尤其是在从外部源接收输入时。