gpt4 book ai didi

c - strcpy() 跳过数组元素

转载 作者:太空宇宙 更新时间:2023-11-04 02:25:26 30 4
gpt4 key购买 nike

我正在尝试将我通过文本文件读入的行共享到共享内存中,以便我的客户端可以访问这些字符串。我的程序只打印第一个和最后一个字符串,似乎忽略了第二行和第三行。

例如,abcd 和 mnop 会这样打印出来:

abcdmnop
abcdmnop
abcdmnop
abcdmnop

如果这是 .txt 文件:

abcd
efgh
ijkl
mnop

我相信主程序中的这个循环可能是

for (int j = 0, k = 0; j < i; j++) {
strcpy((mem + k), words[j]);
k = strlen(words[j]);
}

这是我的主程序:

int main() {
const key_t key = 56871;
FILE *ptr_fp;
char words[600][600];
char *mem;
int i = 0;
ptr_fp = fopen("file.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, k = 0; j < i; j++) {
strcpy((mem + k), words[j]);
k = strlen(words[j]);
}
}
return 0;
}

这是我的客户端程序循环:

for (int i = 0; i < 4; i++) {
printf("%s\n", mem);
}

最佳答案

问题是这样的:

k = strlen(words[j]);

您需要增加 k 字符串的长度:

k += strlen(words[j]);

或者简单地使用 strcat连接字符串:

strcat(mem, words[j]);

当然,这需要你先将mem[0]初始化为字符串终止字符'\0'

关于c - strcpy() 跳过数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096222/

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