小写到c-分割故障中的大写字母问题



我想运行可执行文件

时有分割故障错误
void lowerupper(char *s){
    int i ;
    int a = strlen (s);
    printf("%dn", a);
    //fails here segmentation fault
    for (i=0 ; i < a-1 ; i++){
        if( (s[i] >= 97) && (s[i] <= 122)){
             s[i] = s[i] - 32;
        }
    }
}
int main(void) {
   char* string1 = 'HeLlo wOrlD';
   printf("%sn", string1);
   lowerupper(string1);
   printf("%sn", string1);
   return 0;
}

您无法修改string1。实际上,当您声明这样的字符串

 char* string1 = "HeLlo wOrlD";

该字符串可以存储到仅读取的内存区域中,这意味着您可以读取它,但不能修改它。如果您这样做

char array[] = "hello world";

然后,它创建一个仅读取字符串,然后将字符复制到array中,您将能够将其修改(array中)。邀请您使用关键字 const声明只读字符串。

 const char *string1 = "HeLlo wOrlD";

您可能已经将本地变量的地址传递给了该函数。您应该在堆中分配内存,然后将该变量传递给功能。此代码在这里工作:

#include <stdio.h>
#include<string.h>
#include<stdlib.h>
void lowerupper(char *s)
{
    int i ;
    int a = strlen (s);
    printf("%dn", a);
    for (i=0 ; i < a-1 ; i++)
    {
        if( (s[i] >= 97) && (s[i] <= 122))
        {
             s[i] = s[i] - 32;
        }
    }
}
int main(void) 
{
    char *ss=malloc(10);
    strcpy(ss,"hellon");
    lowerupper(ss);
    printf("%s",ss);
    return 0;
}

样本输出:

6

你好

相关内容

  • 没有找到相关文章