我用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 中使用指针时不起作用?
最佳答案
在 C 语言中,所有字符串文字都是只读字符数组。尝试修改字符串文字会导致未定义的行为。这就是当有指向字符串文字的指针时应仅使用 const char *
的原因。
尝试使用您自己的数组:
char c[] = "HELLO";
关于c - 相同的程序 GCC 崩溃但 msvc 可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40651421/