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

时间:2014-11-06 18:39:07

标签: c pointers char tolower toupper

我有一个结构:

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

3 个答案:

答案 0 :(得分:3)

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

您需要以下内容:

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

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

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

当然,无论如何,请务必稍后致电free()

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

在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);
}