我一直在这里搜索,但找不到解决方法。
在下面的C(linux)代码中,我试图将txt中的字符串读取到缓冲区中,并将该缓冲区复制到结构中的缓冲区数组中,以便可以从客户端读取内容。
问题在于,当我尝试执行strcpy时,它说“内存故障”。我在while循环中的“ HERE”评论了它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int main() {
FILE *fp;
char buff[255];
int i;
int shmid;
typedef struct structStr {
char buffer[100][255];
int numCol;
} structure;
// ftok to generate unique key
key_t key = ftok("shmfile", 65);
// shmget returns an identifier in shmid
shmid = shmget(key, sizeof(structure), IPC_CREAT | 0666);
// shmat to attach to shared memory
structure *input = shmat(shmid, NULL, 0);
fp = fopen("entrada.txt", "r");
i = 0;
while (fgets(buff, sizeof(buff), (FILE *)fp)) {
printf("i = %d ", i);
printf("buff: %s", buff);
strcpy(input->buffer[i], buff); //HERE
// printf("buffer[%d]: %s", i, input->buffer[i]);
i++;
}
input->numCol = i;
// detach from shared memory
shmdt(input);
fclose(fp);
return 0;
}
输出为: 我= 0增益:a1 内存故障
PD:我的txt有:
a1 a2 a3 。 。 。 a30
这就是为什么只打印a1