繁体   English   中英

如何在C中将字符串(char *)转换为大写或小写

[英]How to convert a string (char *) to upper or lower case in C

我有一个结构:

typedef struct entry {
char *surname;
int house_no;
char *postcode;
} BEntry;

以及将字符串转换为大写的函数:

void toUpper(char *str){
    while (*str != '\0')
    {
        *str = toupper(*str);
        str++;
    }
}

在我的main函数中,我将值赋给struct成员,并希望将姓氏转换为大写:

mentry->surname = "bob";
mentry->house_no = 17;
mentry->postcode = "GK116BY";
toUpper(me->surname);

通过将char指针传递给这样的函数,将字符串转换为大写的正确方法是什么? 我的程序正在返回分段错误。 非常感谢任何帮助,谢谢。

你的toUpper()实现应该可以正常工作。 但是,您应该注意编译器的警告(或者如果您没有得到任何警告级别,那么当您将字符串文字分配给类似的char *时,您应该看到一些内容)。 字符串文字是const ,即它们不能被修改。 当您尝试写入它们时,这将导致您看到的分段错误。

你需要这样的东西:

mentry->surname = malloc(4);
strcpy(mentry->surname, "bob");

或者更方便,但不是C标准方式的一部分:

mentry->surname = strdup("bob");

当然,无论如何,请务必稍后调用free()

字符串文字,如"Hello, World!" 是不可写的。 复制字符串文字:

hw = strdup("Hello, World!");

或声明char[]变量并将其初始化为字符串文字。 作为特例,使用这种方式的字符串文字是可写的:

char hw[] = "Hello, World!";

在c中将char *转换为小写或大写的最简单方法是使用strdup

#include <string.h>

char    *to_uppercase(char *s)
{
    int i = 0;
    char    *str = strdup(s);

    while (str[i])
    {
        if (str[i] >= 97 && str[i] <= 122)
            str[i] -= 32;
        i++;
    }
    return (str);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM