硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3515|回复: 10
收起左侧

[有问必答] 基础C语言语法问题

[复制链接]

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
发表于 2018-9-12 16:41:48 | 显示全部楼层 |阅读模式
想从结构体中的字符串copy到另一个字符串
tempdata是一个结构体,它有一个成员 char HWVer[50];另一个独立的字符串是 char XXX[50]
for(i=0;i<50;i++) XXX[i]=tempdata.HWVer[i]; //逐个赋值

结果,XXX中没有预先的字符,全部都是0.。。。怎么回事呢?


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-9-12 17:24:25 | 显示全部楼层
“XXX中没有预先的字符” 是什么意思?
回复

使用道具 举报

14

主题

61

回帖

103

积分

初级会员

积分
103
发表于 2018-9-12 20:23:26 | 显示全部楼层
看着是没问题,如果确实有问题需要结合上下文查看.
复制字符串为何不用strcpy或strncpy.
#include <string.h>
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2018-9-13 08:27:02 | 显示全部楼层
eric2013 发表于 2018-9-12 17:24
“XXX中没有预先的字符” 是什么意思?

比如:tempdata.HW[50]="20180901abcdef"
那么执行后, XXX[50]中应该也是这些字符。可是,里面全部是0.。。。
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2018-9-13 08:27:41 | 显示全部楼层
rgw5267 发表于 2018-9-12 20:23
看着是没问题,如果确实有问题需要结合上下文查看.
复制字符串为何不用strcpy或strncpy.
#include

后来用的strcpy就正常了。
只是想纠结一下原因,这个是工作基础嘛。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-9-13 11:42:22 | 显示全部楼层
caicaptain2 发表于 2018-9-13 08:27
比如:tempdata.HW[50]="20180901abcdef"
那么执行后, XXX[50]中应该也是这些字符。可是,里面全部是0. ...

确认变量XXX[50]是不是被编译器优化掉了。

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-9-13 12:00:51 | 显示全部楼层
定义:
typedef struct
{
        uint8_t b[50];
        uint32_t c;
        uint8_t  a;
}info;

info gg;

uint8_t buf[50];

测试:

888.png

效果:
1.png
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2018-9-13 15:09:35 | 显示全部楼层
本帖最后由 caicaptain2 于 2018-9-13 15:11 编辑
eric2013 发表于 2018-9-13 12:00
定义:
typedef struct
{

这个语法很奇怪啊?

buf = gg.b;

地址位移用的 i 呢?

还有 “ gg.b = i; ”这里,感觉应该是 gg.b=i; 啊??
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-9-13 15:19:05 | 显示全部楼层
caicaptain2 发表于 2018-9-13 15:09
这个语法很奇怪啊?

buf = gg.b;

论坛问题,直接把后缀略掉了,被当成斜杠命令处理了。已修正
回复

使用道具 举报

356

主题

2180

回帖

3253

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3253
 楼主| 发表于 2018-9-13 15:56:15 | 显示全部楼层
eric2013 发表于 2018-9-13 15:19
论坛问题,直接把后缀略掉了,被当成斜杠命令处理了。已修正

感谢耐心解答!
找到自己的问题了,是其他地方。 需要拼接2个char到一个int16里面的时候,用的是“&”符号。应该用“|”的。低级失误。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2018-9-14 01:24:16 | 显示全部楼层
caicaptain2 发表于 2018-9-13 15:56
感谢耐心解答!
找到自己的问题了,是其他地方。 需要拼接2个char到一个int16里面的时候,用的是“&” ...

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-17 16:54 , Processed in 0.044290 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表