C中结构中字符数组的strcpy问题

C中结构中字符数组的strcpy问题,c,struct,strcpy,opcode,c-strings,C,Struct,Strcpy,Opcode,C Strings,所以我正在编写一个程序,在文本文件中输入汇编代码,并生成相应的机器代码。但是,当我尝试为AssemblyLine结构的成员赋值时,遇到了一个问题。当“.fill”是操作码时,arg0被连接到它,如果我先给arg0赋值,arg0也会出现问题。需要注意的是,只有当操作码为“.fill”时才会发生这种情况。例如,如果操作码是“add”,那么这些值就是我想要的值 #include <stdio.h> #include <stdlib.h> #include <string.

所以我正在编写一个程序,在文本文件中输入汇编代码,并生成相应的机器代码。但是,当我尝试为AssemblyLine结构的成员赋值时,遇到了一个问题。当“.fill”是操作码时,arg0被连接到它,如果我先给arg0赋值,arg0也会出现问题。需要注意的是,只有当操作码为“.fill”时才会发生这种情况。例如,如果操作码是“add”,那么这些值就是我想要的值

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct AssemblyLine {
    char opcode[5];
    char arg0[7];
    char arg1[7];
    char arg2[7];
    _Bool initialized;
};

struct Label {
    char name[7];
    int address;
    _Bool initialized;
};

main()
{
   struct AssemblyLine line;
   strcpy(line.opcode, ".fill");
   strcpy(line.arg0, "5");

   printf("%s\n", line.opcode);

   return 0;
}
我的意图是,输出将只是:

.fill
我真的很困惑是什么导致了这一切。对不起,如果答案是显而易见的,这是我第一次在C中工作,虽然我以前用C++编程过。起初我认为没有空终止字符,但在使用第二个strcpy之前,字符串的读取是正常的。填充是否用作strcpy或其他内容的关键字?我想这可能与“.”有关,但当操作码为“.lw”时,这并没有影响任何事情


很抱歉,这篇文章太长了!谢谢你的帮助

您的阵列不够大
“.fill”
是包含终止null的六个字符,但您仅为五个字符分配内存,使用
字符操作码[5]
。您需要将阵列放大。

您的阵列不够大
“.fill”
是包含终止null的六个字符,但您仅为五个字符分配内存,使用
字符操作码[5]
。您需要将数组变大。

字符串“.fill”的长度为5个字符+1个零字符。总共6个字符。 但是数组“操作码”只有5个字符长,因此尾随的零被写入“arg0”。 在此之后,将“5”(2个零字符)复制到“arg0”。 因为“printf”一直打印到尾随零出现,所以它读取的内容超出了操作码的范围。

字符串“.fill”的长度为5个字符+1个零字符。总共6个字符。 但是数组“操作码”只有5个字符长,因此尾随的零被写入“arg0”。 在此之后,将“5”(2个零字符)复制到“arg0”。
因为“printf”一直打印到尾随的零出现,所以它读取的内容超出了操作码的界限。

你知道cstring是以0结尾的吗?@RickyMutschlechner:是的,这看起来是唯一有效的用法。也许…@Deduplicator是的,我想对于显式字符串,你知道CString是0终止的吗?@RickyMutschlechner:是的,这看起来是唯一有效的用法。也许…@重复数据消除是的,我想是的,带着明确的感谢!我看了这么长时间,试图找出到底出了什么问题!谢谢我看了这么长时间,试图找出到底出了什么问题!
.fill