C语言中的大写字母
我有以下代码:C语言中的大写字母,c,uppercase,C,Uppercase,我有以下代码: void changeToCapital(char* str) { int i; for (i=0; i<strlen(str); i++) { str[i] =str[i] -32; } } 我在这里做错了什么?这很可能是因为您正在向它传递一个指向不可写内存的指针,例如从字符串文本中获取的指针: char *ptr = "Hello"; changeToCapital(ptr); // <<== ERROR
void changeToCapital(char* str)
{
int i;
for (i=0; i<strlen(str); i++)
{
str[i] =str[i] -32;
}
}
我在这里做错了什么?这很可能是因为您正在向它传递一个指向不可写内存的指针,例如从字符串文本中获取的指针:
char *ptr = "Hello";
changeToCapital(ptr); // <<== ERROR !
另一方面,只有当所有字母都是小写时,才可以改为大写。您应该使用toupper(ch)
函数而不是减法32
void changeToCapital(char* str) {
for (; *str = toupper(*str) ; str++)
;
}
这很可能是因为您正在向它传递一个指向不可写内存的指针,例如从字符串文本中获取的指针:
char *ptr = "Hello";
changeToCapital(ptr); // <<== ERROR !
另一方面,只有当所有字母都是小写时,才可以改为大写。您应该使用toupper(ch)
函数而不是减法32
void changeToCapital(char* str) {
for (; *str = toupper(*str) ; str++)
;
}
第一:
您一直在计算strlen。相反,您应该将字符串的长度存储在局部变量中
第二:您可能是这样调用函数的:
char *str = "Hello World";
changeToCapital(str);
这是坏的<代码>“Hello World”是const
,不能由您的程序修改。相反,您应该将字符串指定为字符数组,以确保其不可变:
char str[] = "Hello World";
changeToCapital(str);
第一:
您一直在计算strlen。相反,您应该将字符串的长度存储在局部变量中
第二:您可能是这样调用函数的:
char *str = "Hello World";
changeToCapital(str);
这是坏的<代码>“Hello World”是const
,不能由您的程序修改。相反,您应该将字符串指定为字符数组,以确保其不可变:
char str[] = "Hello World";
changeToCapital(str);
您是否正在尝试修改字符串文字?听起来像是指针问题-当它崩溃时,
str
指向的字符串是什么?我正在执行str[i],这不是字符吗?不过,您的函数使用的是char*
。您需要传递它&str[i]
@MikeKwan-nope,实现是好的(如果实现得好的话,它可能是好的…)。问题是他正在修改一个字符串文字。你是在试图修改一个字符串文字吗?听起来像是指针问题-当它崩溃时,str
指向的字符串是什么?我在做str[i],这不是一个字符吗?不过你的函数使用了一个char*
。您需要传递它&str[i]
@MikeKwan-nope,实现是好的(如果实现得好的话,它可能是好的…)。问题是他正在修改字符串文字。strlen(str)
的值在他的代码中不是常量。考虑<代码> STR[i]=STR [i] - 32的影响;<代码>当str[i]=''
@Robᵩ 这只是一个糟糕的设计,不检查意外结果(从而将任何特殊字符处理为小写字母)。@H2CO3-毫无疑问,OP的程序在很多方面都是错误的。我只是观察到Richard的优化不会产生相同的结果。当然,因为Richard的修复至少在某些情况下使函数工作,而不是总是导致错误。strlen(str)
的值在他的代码中不是常量。考虑<代码> STR[i]=STR [i] - 32的影响;<代码>当str[i]=''
@Robᵩ 这只是一个糟糕的设计,不检查意外结果(从而将任何特殊字符处理为小写字母)。@H2CO3-毫无疑问,OP的程序在很多方面都是错误的。我只是观察到Richard的优化不会产生相同的结果。当然,因为Richard的修复至少在某些情况下使函数工作,而不是总是导致错误。而且toupper(ch)
仍然不适用于@Robert Cooper,他对Turkish很感兴趣@RobertCooper我认为不为土耳其语(以及其他许多语言)工作仍然比不为英语工作要好:)而且toupper(ch)
仍然不会为@Robert Cooper工作,他对土耳其语很感兴趣@RobertCooper我认为不为土耳其语(以及其他许多语言)工作仍然比不为英语工作要好:)