如何解决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,我需要它同时打印
- 除了
char a[]="";
,我不能使用其他任何东西
- 必须以这种方式构建
当我打印结果时,是一段时间,但是当我放入结构体时,它只有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..."
,因此仅打印了第一个字符。
您必须使用strcpy
或strncpy
将字符串从数组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 举报,一经查实,本站将立刻删除。