当我运行以下代码时,它显示“分段错误(核心已转储)”。你能帮我找出我犯的错误吗?
#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 != '\0'; s++)
n++;
return n;
}
答案 0 :(得分:0)
代码错误:将字符字节分配给指针。从技术上讲可以,但是指针不包含有效地址。
错误继续进行,str_len认为它是一个字节而接收到该字符。尝试访问该无效地址可能会导致分段错误。
pa char指针未初始化。因此,*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;
答案 1 :(得分:0)
使用带有数组名称的索引将始终引用该索引处特定元素的地址。
*pa = a[0];
,这会将pa
分配给数组a
的第一个元素的地址,而不是整个数组的地址。如果要使*pa = a; or *pa = &a;
指向整个数组,则应分配pa
。