gpt4 book ai didi

c - 将字符串存储在 mmap 共享数组中? (C)

转载 作者:行者123 更新时间:2023-12-01 13:23:44 26 4
gpt4 key购买 nike

我正在尝试使用 mmap 将当前目录中的所有文件名存储在共享数组中,我可以将目录中的所有 9 个文件打印到屏幕上,但是当我尝试将它们存储在数组 (shared_array) 中并打印数组时,所有条目都包含相同的字符串 (file.txt)。提前致谢!

char **shared_array; 
shared_array= mmap(0,100*sizeof(char*),PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANON,-1,0);
char * filename;

const MAXLINE = 80;
char line [MAXLINE];

FILE *fp = popen("/bin/ls","r");

int i = 0;
while(fgets(line, MAXLINE,fp) !=NULL){
filename = line;
shared_array[i] = filename;
i++;
}
pclose(fp);

int j;
for(j=0;j<i;j++){
printf("\n%s",shared_array[j]);
}

最佳答案

当你这样做时:

filename = line;
shared_array[i] = filename;

您实际上并没有将line 数组的内容复制到shared_array。您正在将 line 的地址分配给每个数组元素。结果,所有数组元素都指向同一个位置,即 line,它只包含最近存储的值。

您需要为每个要复制的字符串分配内存。你可以用 strdup 来做到这一点:

shared_array[i] = strdup(line);

但问题在于您拥有包含指向非共享内存的指针的共享内存。

您需要在共享内存中为字符串数组分配空间:

const MAXLINE = 80;
char (*shared_array)[MAXLINE];
shared_array= mmap(0,100*MAXLINE,PROT_READ | PROT_WRITE,MAP_SHARED | MAP_ANON,-1,0);

然后你可以使用strcpy复制到每个数组元素中:

strcpy(shared_array[i], line); 

关于c - 将字符串存储在 mmap 共享数组中? (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48796648/

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