编写strncpy函数
题目要求编写strncpy函数,我已经编好了。
但运行时我想给n赋值,赋完程序就结束了,为什么?
#include <stdio.h>
#include <string.h>
char * strncpy (char * s1, char * s2, int n);
int main (void)
{
int n;
char ar1[10], ar2[10];
scanf ("%d", &n);
while (*gets (ar2))
{
printf ("%s\n", strncpy (ar1, ar2, n));
scanf ("%d", &n);
}
return 0;
}
char * strncpy (char * s1, char * s2, int n)
{
if (strlen (s2) < n)
{
strcpy (s1, s2);
s1[n] = '\0';
}
else strcpy (s1, s2);
return s1;
};
[解决办法]
因为在你输入完n的值后,需要按回车,回车字符被gets()接收,故没有循环!并且if (strlen (s2) < n)应该为大于。 可以改正如下:
#include <stdio.h>
#include <string.h>
char * strncpy (char * s1, char * s2, int n);
int main (void)
{
int n;
char ar1[10], ar2[10];
scanf ("%d\n", &n); //添加‘\n’用于接收回车字符
while (*gets (ar2))
{
printf ("%s\n", strncpy (ar1, ar2, n));
scanf ("%d\n", &n); //重新接收需要拷贝字符的个数
}
return 0;
}
char * strncpy (char * s1, char * s2, int n)
{
if (strlen (s2) > n) //这里改成大于
{
strcpy (s1, s2);
s1[n] = '\0';
}
else strcpy (s1, s2);
return s1;
};
[解决办法]
char * strncpy (char * s1, char * s2, int n)
{
if (strlen (s2) < n)
{
strcpy (s1, s2);
s1[n] = '\0';
}
else strcpy (s1, s2);
return s1;
};//这儿怎么多个一个";"呢;
/* 作为参考吧!这个strncpy使用者需要注意输入的参数s1的空间需要足够大*/
char *strncpy(char *dst, const char *src, int len)
{
assert(s1 != NULL || s2 != NULL);
int i;
for (i = 0; i < len && s2[i]!=0; i++)
s1[i] = s2[i];
s1[i] = 0;
return s1;
}