C语言 为什么我的代码会导致分段错误?



当我运行以下代码时,它显示"分段错误(核心转储("。你能帮我弄清楚我犯的错误吗?

#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;

相关内容

  • 没有找到相关文章

最新更新