【问题标题】:Changing characters in a string by adding value causes runtime error通过添加值更改字符串中的字符会导致运行时错误
【发布时间】:2020-05-19 13:25:39
【问题描述】:

我正在尝试编写一个代码来更改字符数组中的字母。

大部分代码运行良好。但是,当我尝试将大写字母更改为小写字母(反之亦然)时,代码不起作用并且程序结束。

我推测是因为指针不能使用自身或类似的原因。但我无法指出正确的原因。

如果是 xy 问题,我很担心,但请理解我不想上传整个问题,因为这是我的任务,我想尽可能自己解决问题,我认为是学习程序的正确方法。

#include <stdio.h>
#include <string.h>
int main(void){
    //initialize
    char *ae = "sample";
    // for (){}
    ae[0] -= 36;//at this point, program stops
    // tried ae[0] = ae[0] -36 ; *ae = *ae - 36; and so on...
    printf("%c", ae[0] - 36);
}

感谢您的宝贵时间:)

【问题讨论】:

  • @user3121023 对不起,我不习惯编码术语。文字和修饰是什么意思??
  • 改用char ae[] = "sample";
  • 这能回答你的问题吗? Difference between char* and char[]

标签: c arrays pointers runtime-error character


【解决方案1】:

这个表达式...

char *ae = "sample";

...用string literal 初始化指针,这些是只读的,不能修改。表达式ae[0] -= 36; 尝试更改此字符串文字的第一个字符,但这是不允许的,并导致undefined behavior

改为:

char ae[] = "sample";

在另一个注释中,从字母字符中减去 36 不会将其转换为大写字母,至少不是在 ASCII 编码中,您可能指的是 32

无论如何,这不是很便携,您可以使用来自&lt;ctype.h&gt; 库的toupper()tolower() 以获得更强大的选项。

【讨论】:

  • 谢谢你的帮助:) 你的回答对我很有用:):)
  • @JaehoSong,很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-09
  • 2016-05-09
  • 2020-04-04
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多