【问题标题】:How do I convert a char pointer to lower case如何将 char 指针转换为小写
【发布时间】:2020-03-21 00:47:24
【问题描述】:

我正在尝试修复我的程序...但我不知道如何修复此错误“总线错误:10”。

转换为小写函数:

void toLowerCase(char* s){
    while(*s){
        if(*s >= 'A' && *s <= 'Z'){
            *s = tolower(*s);
            ++s;
        }
    }
}

【问题讨论】:

  • 你的while循环一旦遇到不是大写字母的字符就会卡住并永远运行!将 ++s 移动到 if 块之外。
  • 如果你使用for 循环而不是while,你就不太可能犯这种错误。
  • 请注意,tolower 在转换之前还会检查它是否传递了一个大写字符,并且不知道您已经进行了该检查。所以你在浪费处理器时间。
  • @4386427 你应该使用提供的功能:它是安全且便携的。
  • @PaulOgilvie for(; *s; ++s) { } - 我无法理解为什么人们总是在使用迭代器做得更好的时候检查索引...

标签: c arrays pointers character char-pointer


【解决方案1】:

https://godbolt.org/z/cjf3kS

#include <stdio.h>
#include <ctype.h>

char *mylower(char *str)
{
    char *bkp = str;
    while(*str = tolower(*str)) str++;
    return bkp;
}


int main()
{
    char str[]="sdfh><:{^$#WGFDS@SDVERTY3453gflsdwjlgkerZXC||A||";

    printf("%s\n", mylower(str));
}

【讨论】:

  • 这个答案的答案是什么?
【解决方案2】:

谢谢你们的回答:D 这是我的代码:

void toLowerCase(char* s){
    while(*s){
        *s = tolower(*s);
        ++s;
    }
}

现在我调用函数:

char* arr = "PrOgRaM";
toLowerCase(arr);

【讨论】:

  • 是的,这是一个文字字符串,不可修改(只读)。任何将字母更改为小写的尝试都会导致段错误或其他类型的程序中止。
  • 改为使用char arr[] = "PrOgRaM";
  • 是的,就是这样......我想复制 char 数组然后修改它。但问题是我不应该使用函数 strdup() 或任何分配内存的函数......
  • @PaulOgilvie 实际上这是未定义的行为,因此它可能适用于某些平台。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 2011-10-27
  • 2021-11-09
  • 2021-12-16
  • 2011-04-12
相关资源
最近更新 更多