库函数strncpy,字符数组与指针。还有字符数组结尾是'\0'

china_ssl china_ssl 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我感觉和我想的不一样啊

char *strncpy(char *s, char *ct, int n);
char *strncat(char *s, char *ct, int n);
int strncmp(char *cs, char *ct, int n);

char *strncpy(char *s, char *ct, int n) {
char *sign = s;
while(n-- > 0)
if(*s++ = *ct) ct++;
return sign;
}

char *strncat(char *s, char *ct, int n) {
char *sign = s;
while(*s)
s++;
while(n-- && (*s++ = *ct++))
;
return sign;
}


为什么后面的不是用'\0'而是其它什么的呢,windows下好像不确定,linux下确是冲头开始。。。。

比如我这样测试

#include<stdio.h>

#include "strncpy.c"

int getchar(void);

int main() {
int i;
char c[12] = "ca3456";
char s[4] = "zsev";
//char *z = c;
strncat(c, s, 4);
//if(*(s+3) == 'v')
//printf("%c\n", *(s+4));
for(i = 0; i < 12; i++)
printf("%c\t\n", *(c+i));

return 0;
}


结果windows下输出:

c
a
3
4
5
6
z
s
e
v
?
4
linux下输出:

a
c
3
4
5
6
z
s
e
v
a
c
这是为什么啊???
按我的本意是不足n位的全用EOF的啊ct指向的字符数组结尾应该是'\0'啊,也就是如果ct指向的字符数组不足n位就把'\0'复制给s指向的数组以补齐n位啊。
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
china_ssl
C语言 70,040 成员 243,237 内容