gpt4 book ai didi

c - 堆栈溢出带有指针的C复制字符串

转载 作者:行者123 更新时间:2023-11-30 20:19:41 25 4
gpt4 key购买 nike

我正在用 c 语言编写一个递归复制字符串函数,但收到了写访问冲突。当函数到达字符串中的最后一个字母时,函数不会终止。

代码如下:

#include <stdio.h>

void copy(char*, char*, int);

int main()
{
char str1[10] = { 'H', 'e', ' j',' h','e', 'j' };
char str2[10] = { '/0' };

copy(str1, str2, 0);
printf(str2);
getchar();
return 0;
}

void copy(char* str1, char* str2, int index) {
while (str1[index] != '/0') {
str2[index] = str1[index];
index++;
copy(str1, str2, index);
}
return;
}

最佳答案

您有几个问题。

1) \0(空字节)与 /0 不同。 C 字符串以 \0 (或只是 0)终止,这肯定是您想要使用的。

2) ' j'' h' 中有空格 - 这些是多字节字符。这可能又不是您想要的。如果您的目的是在字符之间留有空格,那么你需要:

char str1[] = { 'H', 'e', ' ', 'j',' ', 'h','e', 'j' };

或者,

char str1[] = "He j h ej";

如果不是,请删除 str1 数组的这两个元素中的空格。您可以将其写为:

char str1[] = "Hejhej";

此外,如果省略数组维度会更好(更不容易出错) - 编译器将分配足够的空间。如果您需要知道数组的大小,则可以使用 sizeof str1 来获取它。

您的复制函数根本不需要索引。由于要递归复制,因此使用 while 循环也是不正确的。所以你可以把它写成:

#include <stdio.h>

void copy(const char*, char*);

int main(void)
{
char str1[] = "Hejhej";
/* Equivalent to:
* char str1[] = { 'H', 'e', 'j', 'h', 'e', 'j', '\0' };
*/
char str2[sizeof str1] = { '\0' };

copy(str1, str2);
printf("%s\n", str2);
return 0;
}

void copy(const char *str1, char *str2)
{
if (*str1) {
*str2 = *str1;
copy(++str1, ++str2);
} else {
/* This isn't strictly needed because the destination string `str2` contains null bytes. */
*str2 = '\0';
}
}

关于c - 堆栈溢出带有指针的C复制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49368056/

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