gpt4 book ai didi

c - 使用 Mmap 第一个字符是错误的

转载 作者:行者123 更新时间:2023-11-30 17:16:19 25 4
gpt4 key购买 nike

使用 Mmap 我想更改 Hello,world! 中的文件内容走向果冻,世界!

输入文件是Hello.txt,有1行Hello,world!输出通常是“hello,world!”输出应该是 Jello,world!运行程序 pgm.exe hello.txt 1

关键代码行位于程序末尾(也许有些东西很关键,但我只是不知道)

感谢您的帮助

#include <stdio.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include <signal.h>
#include <string.h>

void main(int argc, char *argv[]) {
int fd, changes, i ;
struct stat buf;
char *the_file,
*starting_string = "Jello,world!";

if (argc != 3) {
printf("Usage: %s file_name #_of_changes\n", *argv);
exit(1);
}

if ((changes = atoi(argv[2])) < 1) {
printf("#_of_changes < 1\n");
exit(1);
}

if ((fd = open(argv[1], O_CREAT | O_RDWR, 0666)) < 0) {
printf("open error on file %s\n", argv[1]);
exit(1);
}

//write(fd, starting_string, strlen(starting_string));

/* Obtain size of file to be mapped */
if (fstat(fd, &buf) < 0) {
printf("fstat error on file %s\n", argv[1]);
exit(1);
}

/* Establish the mapping */
if ((the_file = mmap(0, (size_t)buf.st_size, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0)) == (caddr_t)-1){
printf("mmap failure\n");
exit(1);
}

printf("The file orginally contains:\n %s \n", the_file);

*(the_file) = "Jello,world!";

printf("The file now contains:\n %s \n", the_file);

exit(0);


}

最佳答案

这一行

*(the_file) = "Jello,world!"; 

将“Jello,world!”地址的截断值分配给文件中的第一个字符。

要将单个字符 'J' 分配给该地址,可以这样做:

*(the_file) = 'J';

另外,这一行:

printf("The file orginally contains:\n %s \n", the_file);

是一个等待发生的SEGV。无法保证您的文件包含以 NUL 结尾的字符串。

关于c - 使用 Mmap 第一个字符是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com