库函数strncpy,字符数组与指针。还有字符数组结尾是'\0'
我感觉和我想的不一样啊
为什么后面的不是用'\0'而是其它什么的呢,windows下好像不确定,linux下确是冲头开始。。。。
比如我这样测试
结果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位啊。
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位啊。
...全文
相关推荐
C语言中字符串的使用
**字符串与字符数组的区别**:字符数组不一定以`\0`结尾,而字符串总是以`\0`作为终止符。3. **字符串长度**:字符串的长度是指不包括结束符`\0`在内的字符数量。
C语言字符串详解[代码]
C语言中,字符串被视为字符数组,以空字符('\0')作为结束标志。字符串通常通过字符指针或字符数组来声明和使用。在内存中,一个字符串字面量会占用连续的内存空间,并以'\0'结尾。
C_sub_str.rar_sub
下面我们将详细探讨C库中常用的字符串处理函数,尤其是与子字符串相关的部分。1. **字符串基础**: 在C语言中,字符串是以空字符'\0'结尾的字符数组。
第3节-字符串+内存函数的介绍.pdf
字符串通常是用字符数组或字符串常量来表示。字符串常量适用于那些不需要修改的字符串函数。本章节将重点介绍字符和字符串处理的常用库函数,以及相关的内存操作函数。1.
详解C语言中strcpy()函数与strncpy()函数的使用
它会复制`src`的前`n`个字符到`dest`,但与`strcpy()`不同的是,它可能不会在`dest`中添加结束的空字符`\0`。


