0

该代码是使用库函数复制和连接字符串。我使用的代码:

#include<stdio.h>
#include<conio.h>
#include<string.h>
#define MAX 100
char* newStrCpy(char string1[],char string2[])
{
        int i=0;
        while(string1[i]!='\0')
        {
            string2[i]=string1[i];
            i++;
        }
return (string2);
}
char* newStrCat(char destination[],char arr[])
{
int a=0;
int destlen=0;
while(destination[destlen]!='\0')
{
    destlen ++;
}
while(a<(MAX-destlen))
{
    destination[(destlen+a)]=arr[a];
    a++;
}
return destination;
}
void main()
 {
char string1[MAX],string2[MAX];
int i=0,j=0;
char bak[5]="\n is";
char som[50]=" the concatenated array.";
fflush(stdin);

printf("Enter a string:\n");
scanf("%[^\n]s",&string1);
newStrCpy(string1,string2);
printf("The copied string is:\n");
while(string2[i]!='\0')
{
    printf("%c",string2[i]);
    i++;
}
newStrCat(string2,bak);
newStrCat(string2,som);
printf("\nThe conctenated string is:\n");
while(string2[j]!='\0')
{
    printf("%c",string2[j]);
    j++;
}
fflush(stdout);
getch();
}

我得到的输出:

Enter a string:
Welcome!!

复制的字符串是:

Welcome!!
he concatenated string is:
Welcome!!
is the concatenated string
4

2 回答 2

0

确保将空终止符(字符串的最后一个字符)复制到newStrCpy/Cat.

于 2012-05-25T05:51:59.833 回答
0

你需要初始化你的string2数组:

char string2[MAX] ={'\0'};

这可确保所有成员都设置为\0[Ref #1],并且您不必\0在复制后手动将 a 附加到您的字符串数组。
目前,您的string2数组永远不会以空值终止,因此while循环会继续,直到遇到 a\0并输出不属于您的字符串的垃圾。

另外,在旁注中,

fflush(stdin);

使您的程序具有Undefined Behavior的野兽,不要使用它。
fflush()保证在输出流上工作stdout


[参考 #1]
C99 标准 6.7.8.21

如果大括号括起来的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小数组的字符串文字中的字符少于数组中的元素,则聚合的其余部分应隐式初始化与具有静态存储持续时间的对象相同。

于 2012-05-25T05:52:18.990 回答