C语言的大写

时间:2012-05-21 17:35:35

标签: c uppercase

我有这段代码:

void changeToCapital(char* str)
{
    int i;
    for (i=0; i<strlen(str); i++) 
    {
        str[i] =str[i] -32;
    }
}

并且此方法应该获取char*变量,并将其更改为大写。出于某种原因,我收到错误EXECUTE_BAD_ACCESS

调用函数:

char* s = "itzik";
changeToCapital(s);
printf("%s\n",s);

我在这里做错了什么?

2 个答案:

答案 0 :(得分:12)

这很可能是因为您向它传递了一个指向不可写内存的指针,例如从字符串文字中获取的内存:

char *ptr = "Hello";
changeToCapital(ptr); // <<== ERROR !

您可以更改通话以避免错误:

char ptr[] = "Hello";
changeToCapital(ptr);

在旁注中,只有当所有字母都是小写字母时,您对大写字母的更改才有效。您应该使用toupper(ch)函数而不是减去32。

void changeToCapital(char* str) {
    for (; *str = toupper(*str) ; str++)
        ;
}

答案 1 :(得分:4)

首先:

您一直在计算strlen。相反,您应该将字符串的长度存储在局部变量中。

第二:你可能正在调用这样的函数:

char *str = "Hello World";
changeToCapital(str);

BAD "Hello World"const,您的计划无法修改。相反,您应该将字符串指定为字符数组,以确保它是不可变的:

char str[] = "Hello World";
changeToCapital(str);