0

我正在尝试在 c 中打印一个 char 类型的指针,我能够看到这些值及其内存地址,如下所示

     char *ptr = "I am a string"; 

     printf("\n  value [%s]\n",ptr);
     printf("\n  address [%d]\n",&ptr);

但是当我直接打印如下指针时,它显示错误为Segmentation fault

     char *ptr = "I am a string"; 

     printf("\n  value [%s]\n",*ptr);

请告诉我这里出了什么问题

注意:如果我将 printf 中的格式更改为 [%d] 或 [%i] 它正在打印。

4

3 回答 3

4

*ptr是一个 char,而不是 char 指针,并且%s需要一个 char 指针(指向 C 字符串)。将 char 视为指针时,printf尝试访问无效的内存地址,您会遇到分段错误。

于 2012-05-02T14:53:01.690 回答
3

%s格式说明符需要一个指向以 0 结尾的char数组的指针。如果对应的参数printf*ptra char,则 a) 未定义的行为和 b) 可能导致字符的值(提升为 a int)和可能的一些任意相邻字节,被解释为指针。遵循该假定指针可能会访问未分配给您的程序的内存。

于 2012-05-02T14:54:05.897 回答
1

当您将格式"%s"传入printf时,该函数需要一个指向 s 数组的指针char

于 2012-05-02T14:53:30.730 回答