char *cString 和gets()问题
各位大侠问下下面的代码为什么会出现错误?两种方式有什么不同?
int main(void)
{
//char cString[133]= "This is a string"; //正确
char *cString= "This is a string"; //错误
printf("\nInput the string:");
gets(cString);
return 0;
}
如果使用char cString[133]= "This is a string";则gets(cString);可正常获取字符串。
如果使用char *cString= "This is a string";出错。
ps:用的vs2005 char?*???????gets char?*? gets
[解决办法]
gets是获取键盘输入放到指定的缓冲区地址。指针cString指定的地址是在只读数据区(字符串"This is string"是存放在只读数据区的),所以是没有权限向里面写的;数组cString则是放在堆栈里的,可以读和写。
[解决办法]
char cString[133]= "This is a string"; //正确
//存放在栈区,数组而已,可以读可以写,所以gets获取键盘的输入是可以的
char *cString= "This is a string"; //错误
//存放在静态区,常量字符串,可以读不可以写,所以gets获取键盘的时候出错