int*_*075 0 c arrays string pointers
以下两个代码片段编译时没有任何错误/警告,但在运行时崩溃.请赐教.
计划1
int main( )
{
char *p= "Hello" ;
*p = 'B' ;
printf("\n%s",p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
计划2
int main( )
{
char *p= "Hello" ;
Char *q="mug"
*q = *p ;
printf("\n%s",q);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于程序2,我预计输出为'Hug'.
当你这样做时:
char *p= "Hello";
Run Code Online (Sandbox Code Playgroud)
您正在定义一个字符串文字.字符串文字是常量数据,正如您所知,修改它们会导致未定义的行为(通常是崩溃).它应该声明为:
const char *p = "Hello";
Run Code Online (Sandbox Code Playgroud)
因此,如果您尝试修改它,编译器将抛出错误.
现在,如果您将其定义为:
char p[] = "Hello";
Run Code Online (Sandbox Code Playgroud)
然后在堆栈上分配内存,您可以修改它.
int main(int argc, char *argv[])
{
char p[] = "Hello" ;
*p = 'B' ;
printf("\n%s",p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出 Bello
对于程序2,注意只q需要在堆栈上. p可以保持const指向字符串文字的指针,因为你只是从它读取.
int main( )
{
const char *p = "Hello" ;
char q[] = "mug";
*q = *p ;
printf("\n%s",q);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出 Hug
| 归档时间: |
|
| 查看次数: |
4201 次 |
| 最近记录: |