Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.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中连接两个字符串时出现非法硬件指令错误_C_String_Macos_Clang_Strcat - Fatal编程技术网

在c中连接两个字符串时出现非法硬件指令错误

在c中连接两个字符串时出现非法硬件指令错误,c,string,macos,clang,strcat,C,String,Macos,Clang,Strcat,我想循环遍历一个文本文件并连接所有字符串,直到找到一个空行,然后对下一个字符串执行相同的操作,依此类推。应将每个字符串连接的结果添加到char*数组中: char* element_arr[287]; void splitPassports(FILE* file_to_read){ char element[500]; char str[80]; int i = 0; int j = 0; while(j < FILELENGTH){

我想循环遍历一个文本文件并连接所有字符串,直到找到一个空行,然后对下一个字符串执行相同的操作,依此类推。应将每个字符串连接的结果添加到char*数组中:

char* element_arr[287];

void splitPassports(FILE* file_to_read){
     char element[500];
     char str[80];
     int i = 0;
     int j = 0;

     while(j < FILELENGTH){
         if (fgets(str,80, file_to_read) && !isBlank(str)){
             strcat(element,str);
             printf("The string is: %s\n",str);
         }else if (isBlank(str)){
             element_arr[i] = element;
             memset(element, '\0', sizeof element);
             printf("%s\n",element_arr[0]);
             i++;
         }
         j++;
     }

     fclose(file_to_read);
 }
char*元素_arr[287];
作废拆分护照(文件*文件读取){
char元素[500];
char-str[80];
int i=0;
int j=0;
while(j
然而,当我尝试这样做时,我得到一个非法的硬件指令错误(我在Mac上)。如何正确地将新字符串添加到现有字符串中,然后将其附加到数组中,然后将其设置回零,以对少数行执行相同操作,直到出现空行? 我对C比较陌生,所以提前感谢:)

  • char元素[]=”
    您声明的数组长度为1个字符,因此strcat总是会失败(除非第二个字符串也是空的)

  • 即使您以正确的方式定义它,赋值
    元素\u arr[i]=元素每次都将使用相同的引用分配数组元素,因此数组将简单地填充对相同对象的引用

  • while(!feof(文件读取))
    -read

  • 我建议您从C语言书开始,因为您不了解该语言的基础知识

  • char元素[]=”
    您声明的数组长度为1个字符,因此strcat总是会失败(除非第二个字符串也是空的)

  • 即使您以正确的方式定义它,赋值
    元素\u arr[i]=元素每次都将使用相同的引用分配数组元素,因此数组将简单地填充对相同对象的引用

  • while(!feof(文件读取))
    -read


  • 我建议您从C语言书开始,因为您不了解该语言的基础知识。

    元素
    是一个字符宽(终止符)。任何非空concation都将调用未定义的行为。无关,。请花一些时间刷新,以及。请不要在您显示的代码中包含行号。还要注意,代码将导致更多未定义的行为,而不仅仅是数组越界问题。还可以返回指向本地数组
    元素
    ,该数组的生命周期以函数结束。从何处获得错误?在
    返回中
    ?可能是因为您在
    element\u arr
    中写入了287个以上的条目,或者在
    str
    中写入了80个以上的字符。好的,您已经更改了代码。那么是的,它是
    元素\u arr
    。但是由于
    element\u arr
    中的所有初始化元素都被初始化为指向
    element
    ,因此仍然存在相同的问题。您也从未初始化
    element\u arr
    的未使用元素,因此无法知道已初始化元素的数量。我建议您使用指针、动态分配、重新分配和
    strdup
    函数来动态创建
    element\u arr
    数组及其元素。
    element
    是一个字符宽(终止符)。任何非空concation都将调用未定义的行为。无关,。请花一些时间刷新,以及。请不要在您显示的代码中包含行号。还要注意,代码将导致更多未定义的行为,而不仅仅是数组越界问题。还可以返回指向本地数组
    元素
    ,该数组的生命周期以函数结束。从何处获得错误?在
    返回中
    ?可能是因为您在
    element\u arr
    中写入了287个以上的条目,或者在
    str
    中写入了80个以上的字符。好的,您已经更改了代码。那么是的,它是
    元素\u arr
    。但是由于
    element\u arr
    中的所有初始化元素都被初始化为指向
    element
    ,因此仍然存在相同的问题。您也从未初始化
    element\u arr
    的未使用元素,因此无法知道已初始化元素的数量。我建议您使用指针、动态分配、重新分配和
    strdup
    函数来动态创建
    element\u arr
    数组及其元素?还有两个问题:1。当我尝试将元素变成char*时,这是否解决了您提到的问题1?2.为什么对元素的引用总是相同的?我不能“清除”字符串并给它赋值吗?然后添加到元素_arr?@Phil问的问题表明指针和数组对你来说是“黑色巫术”。正如我所写的,从书中学习C。做练习。没有别的办法。那么,维修不是吗?但一定有办法做到这一点吗?还有两个问题:1。当我尝试将元素变成char*时,这是否解决了您提到的问题1?2.为什么对元素的引用总是相同的?我不能“清除”字符串并给它赋值吗?然后添加到元素_arr?@Phil问的问题表明指针和数组对你来说是“黑色巫术”。正如我所写的,从书中学习C。做练习。没有别的办法。修复工作也是如此