在C中创建toUpper函数
我正在用C创建自己的toUpper函数,但每次尝试运行时都会遇到分段错误。有人能给我一些关于如何解决这个问题的提示吗在C中创建toUpper函数,c,toupper,C,Toupper,我正在用C创建自己的toUpper函数,但每次尝试运行时都会遇到分段错误。有人能给我一些关于如何解决这个问题的提示吗 int toUpper(char *str) { int i; for(i=0;i< i <= strlen(str); i++) { if(str[i] >= 97 && str[i] <= 122) { str[i] = str[i] -32; } }
int toUpper(char *str)
{
int i;
for(i=0;i< i <= strlen(str); i++) {
if(str[i] >= 97 && str[i] <= 122) {
str[i] = str[i] -32;
}
}
return(str[i]);
}
int main()
{
char string[20];
printf("Enter any string:\n");
scanf("%s", string);
char result= (char)(toUpper(string));
printf("The string in upper case is:%s\n", result);
}
int-toUpper(char*str)
{
int i;
对于(i=0;i
for(i=0;i< i <= strlen(str); i++) {
^--
for(i=0;i10。更改建议将toUpper()
更改为:
char *toUpper(char *str) {
size_t len = strlen(str);
size_t i;
for (i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 'a' + 'A';
}
}
return str;
}
char*toUpper(char*str){
尺寸长度=strlen(str);
尺寸i;
对于(i=0;i='a'&&str[i]
结果应为字符*,但为字符。这可能是发生seg故障的地方。其他地方包括:
scanf("%s", string);
如果输入的字符串长度超过19个字符,您可能会遇到问题,因为字符串长度只有20个字符
for(i=0;i< i <= strlen(str); i++) {
for(i=0;i
for(i=0;i=97&&str[i]='a'&&str[i]您不能使用int
或char
返回或存储字符串,则可能需要更改。您必须使用char*
。重新考虑toUpper
和结果的类型。更不用说返回str[i]
将是垃圾。啊,是的。那也是。我甚至没有读到那么深的代码。还有从char*
到char
的奇怪转换,然后再回来打印字符串(现在已经超过了字符串的末尾…)很好。我注意到了我编辑的另一篇文章中的类型警告,但还是让它去吧。@Weather Vane True,第二个想法是char result=(char)(toUpper(string));printf(“大写的字符串是:%s\n”,result);
很可能是OP的seg错误源。但是使用您对返回值的好主意(这似乎是OP的目标),这个问题会随着printf(“%s\n”,toUpper(string));
而消失。我还想添加32
,您可以使用('A'-'A')
——仍然只使用ASCII码,但避免使用幻数。此外,没有理由使用中间变量s
,除非您将循环更改为increments
@user295691,这两点都同意,但使用('a'-'a')表示32。
for(i=0;i< i <= strlen(str); i++) {