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

时间:2018-08-29 09:45:44

标签: c

我想存储包含字符串的数组元素,以使其可通过共享内存段访问。我目前正在使用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;
}

1 个答案:

答案 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]); 
}