微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c-char数组仅输出第一个char

如何解决c-char数组仅输出第一个char

这只是代码的一部分,因此简化了此问题。 我希望能够将单词存储到我的结构中,整个单词不只是第一个字符。

struct lexics{
    enum token token;
    char lexeme[LEXEME_MAX];
};

int main(void) {
  char a[]="";
  
  a[0]='w';
  a[1]='h';
  a[2]='i';
  a[3]='l';
  a[4]='e';
  
          
  struct lexics rs={WHILE_KEYWORD,*a};
  printf("%s\n",rs.lexeme);
}

这只打印w,我需要它同时打印

  1. 除了char a[]="";
  2. ,我不能使用其他任何东西
  3. 必须以这种方式构建

当我打印结果时,是一段时间,但是当我放入结构体时,它只有w

解决方法

在您的代码中

 char result[]="";

不会为您提供无限长度的数组,它是一个元素数组(仅null终止符)。您需要具有适当的大小,或者具有足够长的初始化程序才能具有适当的数组大小。

,
struct lexics{
    enum token token;
    char lexeme[LEXEME_MAX];
};

...

    struct lexics rs={WHILE_KEYWORD,*a};
    printf("%s\n",rs.lexeme);

如果初始化程序少于数组中的元素,则在C数组中填充零。

在您的代码中,您仅提供1个单个char来初始化char lexeme[LEXEME_MAX]数组。这意味着该数组看起来像"w\0\0\0\0...",因此仅打印了第一个字符。

您必须使用strcpystrncpy将字符串从数组a复制到数组rs.lexeme

,

通过执行struct lexics rs = {WHILE_KEYWORD,*a};,可以有效地将a的第一个元素放入lexics.lexeme数组中。尝试使用复制整个数组的函数:

struct lexics rs = {WHILE_KEYWORD};
strncpy(rs.lexeme,a,LEXEME_MAX - 1);
rs.lexeme[LEXEME_MAX - 1] = 0; // to be sure that the string is properly terminated :)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。