当我运行以下代码时,它显示"分段错误(核心转储("。你能帮我弄清楚我犯的错误吗?
#include <stdio.h>
int str_len(char *s);
int main()
{
int m;
char a[] = "Hello, world";
char *pa;
*pa = a[0];
m = str_len(pa);
printf("The length of the string is %d.n", m);
return 0;
}
int str_len(char *s)
{
int n;
for (n = 0; *s != ' '; s++)
n++;
return n;
}
代码错误:将字符字节分配给指针。从技术上讲,没关系,但指针不包含有效的地址。 错误继续存在,str_len接收该字符,认为它是一个字节。尝试访问该无效地址可能会导致分段错误。PA字符指针未初始化。因此,*pa = a[0]
就像试图说address_memory_for_pointers = a[0]
. 尝试跑步:
int m;
char a[] = "Hello, world";
char *pa = a;
m = str_len(pa);
printf("The length of the string is %d.n", m);
return 0;
将索引与数组名称一起使用将始终引用该索引处特定元素的地址。
*pa = a[0];
这会将pa
分配给数组a
的第一个元素的地址,而不是整个数组的地址。 如果您打算使pa
指向整个数组,则应分配*pa = a; or *pa = &a;
。