Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的bzero()会导致我的字符数组出现总线错误?_C_Bus Error - Fatal编程技术网

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);
}