进来看下我的程序!不知道哪里有问题!谢了!~
#include<stdio.h>
#include<string.h>
#define LN 80
#define M 80
void strncpy(char *,char *,int);
int main(void)
{
int i,j;
char array1[LN];
char array2[M];
char c,c1;
for(i=0;i<LN;i++)
{
c=getchar();
if(c!='\n')
array1[i]=c;
else
{
array1[i]='\0';
break;
}
}
for(j=0;j<M;j++)
{
c1=getchar();
if(c1!='\n')
array2[j]=c1;
else
{
array2[j]='\0';
break;
}
}
strncpy(array2,array1,7);
puts(array2);
return 0;
}
void strncpy(char *s1,char *s2, int num)
{
int i,j,n;
i=strlen(s1);
n=strlen(s2);
if(n>=num)
{
for(j=0;j<num;j++)
{
s1[i]=s2[j];
i++;
}
}
else
{
for(j=0;j<n;j++)
{
s1[i]=s2[j];
i++;
}
s1[i]='\0';
}
}
上面是我写的程序。
题意:strncpy(s1,s2,n)函数s2复制n个字符给s1,并在必要时截断s2或为其填充额外的空字符;如果s2的长度大于或等于n,目标字符串就没有标志结束的空字符。自己编写这个函数,并在一个循环语句为这个函数提供输入的完整程序中进行测试。
我的问题:我成功的在输入了两个字符串,问题出现在复制函数那,我的运行的结果总是复制了字符串的一段后出现一段乱码,然后在乱码后面出现后面的一段!
[解决办法]
n>=num的时候也得加上s1[i] = '\0';
if(n>=num) { for(j=0;j<num;j++) { s1[i]=s2[j]; i++; } s1[i] = '\0'; //也得加上这句,应是以num为循环条件的,所以没有拷贝'\0' }