[英]strcpy issue with char arrays in structs in C
因此,我正在开发一个程序,以在文本文件中接收汇编代码并生成相应的机器代码。 但是,尝试将值分配给AssemblyLine结构的成员时遇到问题。 发生的情况是,当“ .fill”是操作码时,arg0被连接到它,如果我先给arg0赋值,则arg0也会出现问题。 重要的是要注意,这仅在操作码为“ .fill”时发生。 例如,如果操作码是“添加”,则这些值就是我想要的值。
#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;
}
该程序的输出为:
.fill5
我的意图是输出将是:
.fill
我真的对造成这种情况的原因感到困惑。 很抱歉,如果答案确实很明显,这是我第一次使用C语言进行工作,尽管我以前使用C ++进行过编程。 起初我以为没有空终止符,但是在我使用第二个strcpy之前,该字符串都可以正常读取。 是否将fill用作strcpy之类的关键字? 我以为可能与“。”有关。 但这在操作码为“ .lw”时没有任何影响。
抱歉,这篇文章太长了! 谢谢你的帮助!
您的数组不够大。 ".fill"
是六个字符,包括终止null,但是您只能使用char opcode[5]
为五个分配内存。 您需要使数组更大。
字符串“ .fill”为5个字符+ 1个零字符。 这使6个字符。 但是数组'opcode'只有5个字符长,因此尾随的零被写入'arg0'。 之后,将“ 5”(2个字符为零的字符)复制到“ arg0”。 因为'printf'一直打印到尾随零出现,所以它会读取操作码的边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.