gpt4 book ai didi

c - 棘手的 C 字符指针问题

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

所以我正在尝试编写一个函数,它将接受两个指向字符的指针并返回一个指向它们连接的新指针。这是我的尝试:

#include <stdio.h>
#include <stdlib.h>

char * append (char *, char *);

int main(void) {

char *start = "start";
char *add = "add";
char* newString = append(start, add);
printf("%s\n", newString);
return 0;
}

char * append(char *start, char *add) {
char *newArray = malloc(sizeof(char) * 100);
//get to end of start word
while (*start != '\0') {
*newArray = *start;
newArray++;
start++;
}
while (*add != '\0') {
*newArray = *add;
newArray++;
add++;
}
return newArray;
}

两个问题:

1) 截至目前它编译但没有打印。我认为这是因为我的 append 函数返回了一个指向连接字符末尾的指针。我是否应该创建一个临时字符指针并在一开始就将其设置为 newArray(这样我就可以返回它)?否则,我必须以某种方式递减我的指针,直到我回到起点。但是没有任何值(例如字符串末尾的“\0”)会告诉我我在 char 数组的开头...

2) 我读到我不能只使用 sizeof() 一个 char 指针,所以我不太确定在附加函数的第一行将什么作为我的参数传递给 malloc。 100 只是一个“足够大”的神奇数字,我想摆脱它......

如果我可以使用 sizeof() 一个字符指针,我会这样做:

char *newArray = malloc(sizeof(strlen(start) + strlen(add)) + 1);

感谢您的帮助,

克莱曼

最佳答案

1) 是的,您需要保存一个指向已分配内存开头的指针,以便您可以返回它。最好将该指针视为“真正的”指针,并将在存储字符时递增的指针视为临时指针,但这实际上没有区别——指针就是指针

2) 这就是 strlen 的用途——它告诉您字符串的长度。所以你想要

char *newArray = malloc(strlen(start) + strlen(add) + 1);

根本不需要sizeof

综上所述,您最终得到:

char *append(char *start, char *add) {
char *newArray = malloc(strlen(start) + strlen(add) + 1);
if (!newArray) return 0; // out of memory
char *copy = newArray;
//get to end of start word
while (*start != '\0')
*copy++ = *start++;
while (*add != '\0')
*copy++ = *add++;
*copy = 0; // add a final NUL terminator
return newArray;
}

关于c - 棘手的 C 字符指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29872947/

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