gpt4 book ai didi

使用指针复制字符会导致段错误

转载 作者:行者123 更新时间:2023-11-30 14:37:35 25 4
gpt4 key购买 nike

这是我的第一篇文章。我试图将字符从一个指针复制到另一个指针的末尾,但是导致了段错误。正确的写法是什么?

char *my_strcat(char *dest, char *src) {
while (*dest != '\0')
dest++;

while (*src != '\0'){
*dest = *src;
dest++;
src++;
}
*dest = '\0';

return dest;
}

int main(void) {
char *p = "Hello";
char *q = "Carl";

printf("%s\n", my_strcat(p, q));
}

它导致的唯一错误是段错误。

谢谢!

最佳答案

以下是更正和需要记住的要点。

  1. char *p = "Hello"; - 在进行字符串操作时,这绝不是一个好主意。当修改 p 处的值时,这可能会产生未定义的行为。看here
  2. char *p = "Hello"; - 这将创建一个大小为 5 的数组。如果您计划进行字符串连接,则连接后指针“应该”指向一个大小为 5 的数组5(hello)+4(carl)+1(\0)=10,这显然是段错误的原因。 在进行字符串连接时,数组中始终有额外的空间
  3. 此外,在递增 dest 指针以指向字符串之后的下一个单元格后,您将返回该指针。您应该记住指针的起始位置,然后返回它。

下面是可以解决您的问题的代码:

#include <stdio.h>

char *my_strcat(char *dest, char *src) {

// Save the beginning of the pointer before incrementing it.
char *beg = dest;

while (*dest != '\0')
dest++;

while (*src != '\0'){
*dest = *src;
dest++;
src++;
}
*dest = '\0';

// Return the beginning of the pointer
return beg;
}

int main(void) {
// Have a char array with more space
char p[10] = "Hello";
char *q = "Carl";
printf("%s\n", my_strcat(p, q));
return 0;
}

关于使用指针复制字符会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57212295/

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