C 使用系统调用时文件中的垃圾值
我通过运行此代码获取垃圾值C 使用系统调用时文件中的垃圾值,c,C,我通过运行此代码获取垃圾值 #include<stdio.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> int main() { int fd,k; fd=open("hello.txt",O_WRONLY|O_CREAT|O_TRUNC); char a[1000]; scanf(" %s",a); k=write(fd,a,
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int fd,k;
fd=open("hello.txt",O_WRONLY|O_CREAT|O_TRUNC);
char a[1000];
scanf(" %s",a);
k=write(fd,a,sizeof(a));
close(fd);
}
#包括
#包括
#包括
#包括
int main()
{
int-fd,k;
fd=open(“hello.txt”,O_WRONLY | O|u CREAT | O|u TRUNC);
字符a[1000];
scanf(“%s”,a);
k=写入(fd,a,sizeof(a));
关闭(fd);
}
当我运行此程序并输入字符串作为输入时,为什么会在这个hello.txt文件中获取垃圾值?因为sizeof()
返回a
的内存大小,即1000
在堆栈上创建一个
,其内容未定义。在scanf()
之后,仅覆盖此堆栈垃圾的第一部分
如果还想写入C字符串分隔符\0
,则需要执行write(fd,a,strlen(a))
,或者使用strlen(a)+1
,该分隔符添加到a
的末尾
请检查返回值op
open()。请参阅手册页面以了解其返回值。sizeof(a)
=>strlen(a)
我支持这个问题,因为这是StackOverflow的精髓,这个问题提供了一个最小的、完整的和可验证的示例,可以尝试您的代码。恭喜!!!:)