c - 如何在 C 中重新定义字符指针中的内容

标签 c pointers

我有以下问题:

我在字符指针变量中有一个字符串,我想将字符串中的每个字符移动 1(例如),然后在最后我想将新字符串存储到原始变量中。

我的代码如下:

int main(){
    char *string = "Hello";

    while (*string != '\0') {
        putchar(*string + 1);
        string++;
    }

    return 0;
}

如果我使用 putchar 它会按预期工作,但是当我尝试这样做时:

*string = *string +1; 我得到一个段错误

我也试过这些方法:

*string = &string +1;

*shifted = *string +1;
shifted = *string;

string = *string +1;

但似乎都不起作用,我收到警告或段错误。

有没有一种方法可以重新定义 *string 以在其中包含新的移位字母,以便我以后可以使用它。

非常感谢您的帮助。

最佳答案

正如评论中所指出的,您不能修改string。这就是为什么它适用于 putchar 而不是当您尝试修改它时。这是做您想做的事情的一种方法。

int main(){
    char *string = "Hello";
    char *shifted = malloc(strlen(string));

    for(int i = 0; i < strlen(string); i++) {
        shifted[i] = string[i] + 1;
    }

    printf("%s %s\n", string, shifted);

    free(shifted);
    return 0;
}

关于c - 如何在 C 中重新定义字符指针中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58755695/

相关文章:

java - 为什么 log(1000)/log(10) 与 log10(1000) 不同?

c - struct的正确使用方法

c++ - 为什么 Windows API 提供 2 种获取 "return"值的方法?

c - 在 C 中使一个指针指向另一个指针所指向的内容

C-将文本内容加载到二维数组中

c - 免费字符* : invalid next size (fast)

c - 如何创建这个公式?

cocoa - NSArray 中的 NSArray。指针问题?

pointers - 在 Golang 中将类型 uintptr 分配给 uint64

c++ - 如何将独立的 c 应用程序组合成 c++ 应用程序?