在 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 < length; i++) endptr++;
替换为endptr += length;
。另请注意,您的 endptr
最初指向尾随空值,因此您的交换循环需要考虑到这一点。
提示:将unsigned char
的所有实例更改为仅char
。毕竟,你甚至在函数内部使用了char
!
提示:第二个循环可以换成endptr += length;
提示:您不需要counter
。只需循环直到endptr < str
。
提示:最后一个循环可以换成printf("%s\n", str);
【参考方案1】:
您正在尝试修改字符串常量。替换
char *array = "Hello"; // Not an array.
与
char array[] = "Hello";
【讨论】:
以上是关于在 C 中使用指针反转字符串(必须使用无符号 *char)的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组与指针操作 ( 数组符号 [] 与 指针 * 符号 的 联系 与 区别 | 数组符号 [] 与 指针 * 符号 使用效果 基本等价 | 数组首地址 与 指针 本质区别 )