我是C的新手,我正试图找出指针。我尝试了这个简单的(根据我)代码并在GCC中继续得到分段错误
#include<stdio.h>
int main()
{
char c[50] = "abc";
char h[50];
char *ptr;
printf("abc");
ptr = c;
printf("Address stored in ptr: %p" , ptr);
printf("Value of ptr: %s" , *ptr);
}
我读了段错误,发现当我尝试引用不属于我的内存时会发生这些错误。我在这个代码中在哪里做这个?谢谢!
答案 0 :(得分:4)
更改此声明
printf("Value of ptr: %s" , *ptr);
到
printf("Value of ptr: %c" , *ptr);
或
printf("Value of ptr: %s" , ptr);
取决于您想要看到的内容。或者使用它们来看看差异。:)
答案 1 :(得分:1)
printf("Value of ptr: %s" , *ptr);
告诉计算机将存储在ptr
指向的地址处的值解释为字符串的地址。在大多数情况下,这将是未映射的内存区域的地址(在小端机器上0x636261
,例如x86 / x64),因此会出现分段错误。
由于%s
格式说明符会释放字符串的地址,因此无需取消引用指针:
printf("Value of ptr: %s" , ptr);