当我想运行可执行文件
时,我遇到了分段错误错误void lowerupper(char *s){
int i ;
int a = strlen (s);
printf("%d\n", 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("%s\n", string1);
lowerupper(string1);
printf("%s\n", string1);
return 0;
}
答案 0 :(得分:1)
您无法修改string1
。事实上,当你声明一个像这样的字符串
char* string1 = "HeLlo wOrlD";
字符串可以存储在READ-ONLY存储区中,这意味着您可以读取它,但不能修改它。 如果你这样做
char array[] = "hello world";
然后它创建一个只读字符串,并将字符复制到array
,您将能够修改它(进入array
)。
我们邀请您使用关键字const
声明只读字符串。
const char *string1 = "HeLlo wOrlD";
答案 1 :(得分:-1)
您可能已将局部变量的地址传递给该函数。 您应该在堆中分配内存,然后将该变量传递给函数。 这段代码在这里工作:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
void lowerupper(char *s)
{
int i ;
int a = strlen (s);
printf("%d\n", 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,"hello\n");
lowerupper(ss);
printf("%s",ss);
return 0;
}
示例输出:
6
您好