c中的小写字符串

cap*_*ede 1 c string lowercase

我在这里有几行:

#include <stdio.h>

char *tolower(char *data)
{
    char *p = data;
    while(*p)
    {
        printf("nilai p : %c\n",*p);
            if(*p >= 'A' && *p <= 'Z')
            {
                *p += ('a' - 'A');
            }
        p++;
    }
    return p;

}

int main()
{

    char *a = "HajAR BleH";
    char *b = tolower(a);

    printf("nilai b : %s\n",b);
    printf("nilai a - A : %d\n",'a' - 'A');
return 0;
}
Run Code Online (Sandbox Code Playgroud)

接下来,编译,在gdb上运行,并跟踪分段

xxx@aaa:/tmp$ gcc -o aa aa.c --debug
xxx@aaa:/tmp$ gdb -q aa
Reading symbols from /tmp/aa...done.
(gdb) r
Starting program: /tmp/aa 
nilai p : H

Program received signal SIGSEGV, Segmentation fault.
0x0804841e in tolower (data=0x804855e "HajAR BleH") at aa.c:11
11                  *p += ('a' - 'A');
(gdb) 
Run Code Online (Sandbox Code Playgroud)

1.我认为*p += ('a' - 'A');等于'H' += ('a' - 'A')和等于72 += 32 但是,意外分割错误,它怎么可能?

2.为什么需要添加("A" - "A"),使char/ byte获取低?

这就是现在,谢谢你们

小智 7

您正在尝试修改字符串文字.更改:

char *a = "HajAR BleH";
Run Code Online (Sandbox Code Playgroud)

至:

char a[] = "HajAR BleH";
Run Code Online (Sandbox Code Playgroud)

此外,还有一个名为tolower()的标准库函数,实际上您应该在代码中使用它.将自己的功能称为其他功能.