繁体   English   中英

C中的结构中的char数组的strcpy问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM