我想存储包含字符串的数组元素,以使其可通过共享内存段访问。我目前正在使用strcpy(),但显然它仅将最后一个字符串存储在数组中。我将如何将所有4个字符串存储在数组中?目前,我只能选择要发送的行(例如,带有以下两个循环的第一行:
这是我在服务器程序中的循环:
for(int j = 0; j < 1;j++){
strcpy(mem,words);
}
和客户端程序:
for(int i = 0; i < 1; i++){
printf("%s\n",mem);
}
这是完整的服务器程序:
int main() {
const key_t key = 12345678;
FILE *ptr_fp;
char words[600][600];
char *mem;
int i = 0;
ptr_fp = fopen("words.txt","r");
int shmid = shmget(key, sizeof(float)*8, 0644 | IPC_CREAT);
if (shmid < 0) {
perror("shmget");
exit(1);
}
if (ptr_fp != NULL){
while(fgets(words[i],600,ptr_fp )&& i <600){
i++;
}
}
mem = (char *)shmat(shmid,NULL,0);
if(mem == (char *)-1){
perror("shmat error\n");
exit(1);
} else {
for(int j = 0; j < 1;j++){
strcpy(mem,words);
}
printf("Memory is attached\n");
}
return 0;
}
答案 0 :(得分:1)
这看起来像是复制粘贴错误。
在此while
循环中,i
得到更新。
while(fgets(words[i],600,ptr_fp )&& i <600) {
i++;
}
在for
循环中,应将j
与控制表达式中的i
比较,而不是将其与1
for(int j = 0; j < 1; j++) {
strcpy(mem,words);
}
我认为以上内容应更改为:
for(int j = 0, k = 0; j < i; j++) {
strcpy((mem + k),words[j]);
k = k+ strlen(words[j]);
}