【发布时间】:2020-09-19 04:05:06
【问题描述】:
我正在尝试创建一个函数toLowerCase(char *string),但我无法使其正常工作。
这是我的代码
void toLowerCase(char *string) {
int i = 0;
while (*(string+i) != '\0') {
if (*(string+i) >= 'A' && *(string+i) <= 'Z') {
*(string+i) = *(string+i) + 32;
}
i++;
}
printf("%s", string);
}
我正在尝试通过使用 *(string + i) 访问每个元素并使用 ASCII 转换为小写来遍历 char * 指针的字符串。
我是新来的,如果在我很抱歉之前回答了这个问题,但我问是因为我找不到解决我的问题的具体解决方案。我已经尝试过这个线程中的内容:Converting Char * to Uppercase in C 但这对我也不起作用。
编辑:这就是我调用函数的方式
int main() {
toLowerCase("HELLO WORLD");
return 0;
}
编辑 2:所以,我这样做了,正如 PSkocik 所示。它奏效了,但我不知道为什么它会这样。 toLowerCase() 函数是否可以与任何 char * 指针一起使用?即使我不将其声明为char 数组?
这也解决了来自莫斯科的弗拉德指出我使用字符串文字的问题
#define T 100
int main() {
char string[T] = "HELLO WORLD";
toLowerCase(&string);
return 0;
}
编辑 3:非常感谢您的帮助!没想到这么快就得到帮助!我不知道字符串字面量是什么!
非常感谢您的宝贵时间
【问题讨论】:
-
您似乎正在将字符串文字传递给函数。显示您如何调用该函数。
-
对我来说很好用:gcc.godbolt.org/z/X4YA5B。
*(string+i)而不是string[i]有点不寻常,我至少将魔术常数32替换为('a'-'A'),但它确实可以正常工作。 -
您遇到的错误是什么?是分段错误吗?
-
我刚刚添加了调用函数的位置。我没有收到错误,它在 ''' *(string+i)= *(string+i)+32; 之后卡住了''' 行并返回 -1073741819
-
返回该值的是什么?当你说它卡住时,你的意思是循环永远不会结束吗?
标签: c char c-strings string-literals tolower