c - 生成没有指针的大写字母

标签 c string character

我正在尝试编写一个大写函数,它将字符串中的所有小写字符转换为大写字符。

但是,我的代码中出现 Bus 10 错误。我知道在 C 中不能修改字符串文字;所以,我不确定这是否是正确的方法。

我的代码如下:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>

int uppercase(char source[])
{
 int i;

 for(i=0; i<=strlen(source); ++i)
    if (source[i]>= 'a' && source[i]<= 'z')
        source[i]= source[i]-'a' +'A';
    else 
        source[i]=source[i];
}

int main(){
    uppercase("cold");

    return 0;
}

理想情况下,此函数应返回 COLD。我想错误出在我的整个 if 语句中。

最佳答案

导致崩溃的原因是您的代码修改了字符串文字。字符串文字中的字符被放置在 protected 内存区域中,因此不能更改:它使用未定义的行为。

替换这个

uppercase("cold");

用这个:

char cold[] = "cold";
uppercase(cold);

现在字符串的字符被放置在内存的可修改区域,允许您根据需要进行更改。

关于c - 生成没有指针的大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723508/

相关文章:

c++ - 字符串中的数字总和(使用字符串对象)C++

c - C 中的模式匹配,PCR 的替代方案

C: for (i=0;i<=N;i++) { t[i] = pow(a,0.i);总是返回 1

c++ - 为什么 { } while(condition);末尾需要分号但 while(condition) {} 不需要?

r - 如何将字符参数(十进制数)转换为 R 中的数字?

android - 哪些字符不能用于 SQLite 数据库中的值?

C++,从 char 数组中提取带符号的多位整数

c++ - 使用configure文件生成makefile

c# - 将字符串转换为 BigInteger

c - 如何使 strcmp 函数?