如何消除字符串连接输出中不必要的符号?

时间:2012-05-25 05:48:05

标签: c string

代码是在不使用库函数的情况下复制和连接字符串。我使用的代码:

#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

2 个答案:

答案 0 :(得分:0)

确保在newStrCpy/Cat中复制空终结符(字符串的最后一个字符)。

答案 1 :(得分:0)

您需要初始化string2数组:

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

这可确保 将所有成员设置为\0 [Ref#1] ,您无需费心追加复制后,手动将\0复制到字符串数组 目前,您的string2数组永远不会终止,因此while循环会一直持续到遇到\0并且它输出的垃圾不是您字符串的一部分。

另请注意,

fflush(stdin);

让您的程序拥有未定义行为的野兽,请勿使用它 保证fflush()可以处理输出流stdout


[Ref#1]
C99标准6.7.8.21

  

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