write函数的第三个参数(sizeof和strlen的区别)1.sizeof和strlen的区别
int main(void)
{
char s1[]="hello";
//这种写法系统会把s1当成⼀个字符串,有'\0'结尾
int len1 =sizeof(s1);
int len2 =strlen(s1);
printf("sizeof(s1) = %d\n",len1);
printf("strlen(s1) = %d\n",len2);
char s2[10]={'h','e','l','l','o'};
//这种写法系统会把s2当成⼀个字符数组,没有'\0'结尾
int len3 =sizeof(s2);
int len4 =strlen(s2);
printf("sizeof(s2) = %d\n",len3);
printf("strlen(s2) = %d\n",len4);
char s3[10]="hello";
int len5 =sizeof(s3);
int len6 =strlen(s3);
printf("sizeof(s3) = %d\n",len5);
printf("strlen(s3) = %d\n",len6);
}
char* ss ="0123456789";
sizeof(ss)结果4===》ss是指向字符串常量的字符指针,sizeof获得的是⼀个指针所占的空间,应该是长
整型的,所以是4
sizeof(*ss)结果1===》*ss是第⼀个字符其实就是获得了字符串的第⼀位'0'所占的内存空间,是
char类型的,占了1位
strlen(ss)=10>>>>如果要获得这个字符串的长度,则⼀定要使⽤ strlen
2.write函数中:
1、write(fd, buf, sizeof(buf));和write(fd, buf, strlen(buf));的区别。
2、write(fd, buf, strlen(buf));向⽂件中写⼊内容的是,只会把缓冲区中的有效内容全部拷贝到⽂件中。
3、write(fd, buf, sizeof(buf));会把缓冲区中的所有数据拷贝到⽂件中。
int main(int argc,char*args[])
{
// 以只写的⽅式打开两个⽂件
int fd1 =open("a.txt", O_WRONLY);
int fd2 =open("b.txt", O_WRONLY);
// 定义写⼊⽂件需要缓冲区
char buf[1024];
// 清空缓冲区数据
memset(buf,0,sizeof(buf));
// 向缓冲区写⼊数据
strcpy(buf,"hello world");
// 把缓冲区数据写⼊到⽂件中
write(fd1, buf,strlen(buf));
write(fd2, buf,sizeof(buf));
// 关闭⽂件
sizeof 指针close(fd1);
close(fd2);
return0;
}
11 a.txt 这个使⽤的是strlen,⽂件⼤⼩是11,是"hello world"的长度
1024 b.txt 这个使⽤的是sizeof,⽂件⼤⼩是1024,刚好是缓冲区的⼤⼩
说明:
在使⽤write向⽂件中写⼊数据的时候,⼀般使⽤write(fd, buf, strlen(buf));
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论