Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用系统调用时文件中的垃圾值_C - Fatal编程技术网

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的精髓,这个问题提供了一个最小的、完整的和可验证的示例,可以尝试您的代码。恭喜!!!:)