【发布时间】:2014-11-12 04:16:11
【问题描述】:
所以我正在开发一个程序来接收文本文件中的汇编代码并生成相应的机器代码。但是,当我尝试将值分配给组装流水线结构的成员时,我遇到了一个问题。发生的情况是,当“.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”时,这不会影响任何事情。
抱歉这篇文章太长了!感谢您的帮助!
【问题讨论】:
-
你知道 cstrings 是 0 终止的吗?
-
@RickyMutschlechner:是的,这看起来是唯一有效的用途。也许……
-
@Deduplicator 是的,我想用一个明确的字符串
标签: c struct strcpy opcode c-strings