gpt4 book ai didi

将指针到指针(包含指针的数组)复制到另一个数组

转载 作者:行者123 更新时间:2023-11-30 21:06:20 24 4
gpt4 key购买 nike

我尝试将指针复制到指针(包含指针的数组),但是当我运行时它得到奇怪的结果:这是我的代码:

#include<stdio.h>
#include<string.h>

#pragma warning(disable:4996)
void mycopy(char *c[], char *o[], int olen);
char *alloc(int n);

int main() {
char *o[] = { "12", "13", "14" };
char *c[3];
mycopy(c, o, 3);
for (int i = 0; i < 3; i++) {
printf("%s\n", o[i]);
printf("%s\n", c[i]);
}
return 0;
}

void mycopy(char *c[], char *o[], int olen) {
char *t;
for (int i = 0; i < olen; i++) {
//printf("%d\n", strlen(o[i]));
if ((t = alloc(strlen(o[i]))) == NULL) {
printf("don't use copy cause there isn't enough space\n");
return;
}
//printf("%s\n", o[i]);
strcpy(t, o[i]);
//printf("%s\n", t);
*c++ = t;
}
}

#define MAXBUF 1000000
char buf[MAXBUF]; /* Maximum space which we can allocate */
char *bufc = buf;

/* alloc: allocate space to a pointer */
char *alloc(int n) {
if (buf + MAXBUF - bufc >= n) {
bufc += n;
return bufc - n;
}
else
return 0;
}

奇怪的是 c 的结果是:121314 1314 14当我通过 mycopy 函数中的注释 printfs 检查该过程时,一切似乎都是正确的。还有其他方法可以复制吗?哦,我是 c 初学者,所以当我尝试解决 K&R2 中的示例时,这个问题就出现在我身上。

最佳答案

t = alloc(strlen(o[i]))

但是字符串的长度是 strlen+1,因为尾随 nul 终止符需要一个字节。

如果您不确定,只需使用 strdup 即可。

注意。通过检查存储在三个指针中的地址,您可以准确地了解为什么会给出这样的输出。要么使用调试器,要么只打印地址。

关于将指针到指针(包含指针的数组)复制到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49435832/

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