C 为什么我的bzero()会导致我的字符数组出现总线错误?
我试图理解为什么使用C 为什么我的bzero()会导致我的字符数组出现总线错误?,c,bus-error,C,Bus Error,我试图理解为什么使用bzero或memset的简单代码会导致总线错误,并伴有clangg或gcc我找不到任何逻辑解释 我尝试一下这篇文章中的简单例子: #包括 #包括 #包括 int main(){ char*str; printf(“%lu\n”,strlen(str)); bzero(str,1);//好的 str=“你好”; bzero(str,strlen(str));//总线错误 //memset(str,0,strlen(str));//总线错误 返回(0); } str是一个指向字
bzero
或memset
的简单代码会导致总线错误,并伴有clangg
或gcc
我找不到任何逻辑解释
我尝试一下这篇文章中的简单例子:
#包括
#包括
#包括
int main(){
char*str;
printf(“%lu\n”,strlen(str));
bzero(str,1);//好的
str=“你好”;
bzero(str,strlen(str));//总线错误
//memset(str,0,strlen(str));//总线错误
返回(0);
}
str
是一个指向字符串文字的指针,不能更改,请使用char-str[8]
,strlen(str)
也不好,因为str
未初始化。str=“bonjour”代码>不应该工作@JHBonarius,这是一个有效的语句,它将字符串文字赋给str
指针,它只是不能像OP预期的那样工作。它应该是<代码> const 精确地避免OP试图做的事情。@ StuffFieldl,这是应该被发明的东西之一:)AnasaCiu我使用的是C++编译器。这可能就是为什么它对我不起作用;)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str;
printf("%lu\n",strlen(str));
bzero(str,1); // ok
str = "bonjour";
bzero(str,strlen(str)); // bus error
// memset(str, 0, strlen(str)); // bus error
return(0);
}