我想运行可执行文件
时有分割故障错误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
你好