在 C 中使用指针反转字符串(必须使用无符号 *char)

Posted

技术标签:

【中文标题】在 C 中使用指针反转字符串(必须使用无符号 *char)【英文标题】:reverse a string using pointers (have to use unsigned *char) in C 【发布时间】:2020-01-03 16:50:37 【问题描述】:

我目前正在为 Uni 工作。

任务是在单独的函数中反转字符串。函数名是这样给出的:

void string_rev(unsigned char *str);

我的解决方案如下所示:

void string_rev(unsigned char *str)

    int length = 0;
    int counter = 0;
    unsigned char *endptr = str;   

    for (int i = 0; str[i] != '\0'; i++)  //getting length of string
        length++;

    for (int i = 0; i < length; i++)     //putting endptr to end of string
        endptr++;

    while (counter < length/2)      //switch values from start to end until half of string
        char temp = *str;
        *str = *endptr;
        *endptr = temp;
        str++;
        endptr--;
        counter++;
    


    for (int i = 0; i<length; i++)
        printf("%c", *str);
        str++;
    




int main (void)


    char *array = "Hello";
    unsigned char *ptr = (unsigned char*)array;


    string_rev(ptr);


    return 0;


我得到的错误是总线错误 10!但我找不到错误。

这可能与 unsigned char* 有关,但我无法让它工作。有人可以帮忙吗?

仅供参考 -> 我们必须使用 unsigned char*!当然还有指针!

谢谢你:)

【问题讨论】:

顺便说一句,您可以使用strlen(str) 来获取字符串的长度。你不需要for (int i = 0; str[i] != '\0'; i++) length++;。您可以将for (int i = 0; i &lt; length; i++) endptr++; 替换为endptr += length;。另请注意,您的 endptr 最初指向尾随空值,因此您的交换循环需要考虑到这一点。 提示:将unsigned char 的所有实例更改为仅char。毕竟,你甚至在函数内部使用了char 提示:第二个循环可以换成endptr += length; 提示:您不需要counter。只需循环直到endptr &lt; str 提示:最后一个循环可以换成printf("%s\n", str); 【参考方案1】:

您正在尝试修改字符串常量。替换

char *array = "Hello";   // Not an array.

char array[] = "Hello";

【讨论】:

以上是关于在 C 中使用指针反转字符串(必须使用无符号 *char)的主要内容,如果未能解决你的问题,请参考以下文章

C程序:用函数更新无符号字符指针数组

任何可用于 C 中无符号字符指针行为的文档? [复制]

c_cpp 无符号整数的反转位

c_cpp 使用指针算法反转字符串

c中的无符号整数和整数指针[关闭]

C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )