【发布时间】:2013-11-23 12:35:10
【问题描述】:
我得到一个段。当我尝试从 char 类型中减去 32 时出错(尝试在 C 中不使用 tolower() 转换为小写。我已经完成了先决条件搜索相关 Q/A 线程但没有运气。我还尝试了 'a' - 'A'对于转换值“32”,将其转换为 (char*) 以及我能想到的任何其他内容。例如:
char* s1 = "Bob";
if (*s1 >= 97 && *s1 <= 122)
*s1 -= 32;
}
有什么建议吗?
编辑:
按照下面的帮助后,我仍然收到错误消息。 (对于这个例子,我只是想把名字的第一个字母改成小写。)这是我正在尝试的:
char* s1 = "Bob";
printf("\n %s before", s1);
// below I call my string length function to get actual size instead of 100
char* temp = malloc(100);
temp = s1;
if (*temp >= 'A' && *temp <= 'Z'){
*temp -= 32;
}
printf("\n%s after", temp);
free(temp);
另外,为什么我需要为已经在内存中的字符串分配内存?
【问题讨论】:
-
除了修改字符串文字这一事实外,不要使用“幻数”。当你的意思是
'a'和'z'时,不要写97和122。 -
好吧,如果与数字相比,我认为 C 将字符视为它们的 ASCII 值
-
确实如此。但是你应该使用实际的字符,这样它就更易读了。
-
@user2827214:确实如此,但 Keith 的观点是,如果您使用
'a'而不是97,您的代码更具可读性。 -
我猜不是每个人都会同意,但我更喜欢写
s1[0]而不是*s1来访问第一个元素。