在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; } }

我正在用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;
        }
    }
    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
,除非您将循环更改为increment
s
@user295691,这两点都同意,但使用('a'-'a')表示32。
  for(i=0;i< i <= strlen(str); i++) {