我在C中编写了一个程序来在gcc中编译它时降低字符串,它在运行时崩溃。 但在MSVC计划中运行顺利。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *strlower(char *s){
for ( ; *s; ++s) *s = tolower(*s);
return (char *)s;
}
int main(){
char *c = "HELLO";
strlower(c);
printf("%s",c);
return 0;
}
如果变量c
是数组,则程序在两个编译器中都有效。在gcc中使用指针时为什么不工作?
答案 0 :(得分:2)
在C中,所有字符串文字都是只读字符数组。尝试修改字符串文字会导致未定义的行为。这就是你在指向字符串文字时只应使用const char *
的原因。
尝试使用您自己的数组:
char c[] = "HELLO";