strcpy() 只存储最后一个字符串



我想存储包含字符串的数组元素,以便通过共享内存段访问它。我目前正在使用 strcpy((,但它显然只存储数组中的最后一个字符串。如何让它将所有 4 个字符串存储在数组中?目前我只能选择我想发送的行(例如,第一行带有以下两个循环:

这是我在服务器程序中的循环:

for(int j = 0; j < 1;j++){
strcpy(mem,words);
}

和客户端程序:

for(int i = 0; i < 1; i++){
printf("%sn",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 errorn");
exit(1);
} else {
for(int j = 0; j < 1;j++){
strcpy(mem,words);
}
printf("Memory is attachedn");
}
return 0;
}

这看起来像是一个复制粘贴错误。

在此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]); 
}

相关内容

最新更新