【问题标题】:Copy string in C, using pointer [duplicate]使用指针在C中复制字符串[重复]
【发布时间】:2018-04-11 15:08:21
【问题描述】:

我是一名初级程序员。我编写了以下代码,使用指针将一个字符串复制到另一个字符串中。 但我没有得到输出。编译器说分段错误。 我已经翻遍了这个程序,但无济于事。我无法定位故障,以及如何解决它。 很难相信,但我现在已经被困了将近 2 个小时。 非常感谢任何帮助。

#include<stdio.h>

char *copy(char*, char*);

int main() {
    char *str1 = "avanti";
    char *str2 = "ujj";

    printf("%s\n", str1);

    char *result = copy(str1, str2);

    printf("%s", result);
}

char *copy(char *str1, char *str2){
    int i=0;
    while (*(str2+i) != '\0') {
        *(str1+i) = *(str2+i);
        i++;
    }

    *(str1+i) = '\0';
    return str1;
}

【问题讨论】:

  • 特别是在迈出第一步时,请随意使用const说出你的参数名称。 srcdest 随时击败 str1str2
  • 请注意,使用char str1[] = "avanti"; 是可以的,因为它比您复制的内容要长。如果你有char *str2 = "alphabet";,即使是数组也会有问题——缓冲区溢出。另外,使用str2[i] != '\0'*(str2 + i) != '\0' 更容易阅读——两者在效率上没有区别。
  • @JonathanLeffler 关于你的第二点,这个问题看起来像是一个理解语法的练习,所以完全使用 *s 似乎是合理的,并且本身不值得批评,尽管数组语法是很好的附加信息

标签: c string pointers


【解决方案1】:

"avanti" 是一个字符串常量,不是你可以复制到的地方。你可以把它改成char str1[] = "avanti"; 这是一个字符数组,用字符串常量"avanti"的值初始化

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多