小编Bla*_*aze的帖子

将uint8_t数组复制到结构

我有这个数组

uint8_t *buffer = "JOHN:DOE:010119:M:FOO:BAR";
Run Code Online (Sandbox Code Playgroud)

我想逐字段地将它复制到数据结构中

typedef struct{
  uint8_t firstName[5];
  uint8_t pad1;
  uint8_t lastName[4];
  uint8_t pad2;
  uint8_t dateOfBirth[7];
  uint8_t pad3;
  uint8_t genre;
  uint8_t pad4;
  uint8_t car[4];
  uint8_t pad5;
  uint8_t phone[4];
  uint8_t pad6;
}DataStructTypeDef;
Run Code Online (Sandbox Code Playgroud)

假设所有长度都是固定的(例如firstName,总是由4个字符,lastName3个等等组成......)

我用这种方法:

DataStructTypeDef foo;
memcpy((void *)&foo, (void *)buffer, sizeof(DataStructTypeDef));
Run Code Online (Sandbox Code Playgroud)

当我尝试打印时,dateOfBirth它显示从01012019开始的整个数组

int main(void)
{
  DataStructTypeDef foo;
  memcpy((void *)&foo, (void *)buffer, sizeof(DataStructTypeDef));
  printf("%s", foo.dateOfBirth); // It prints 010119:M:FOO:BAR
//printf("%s", foo.dateOfBirth); // Expected value 010119
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c memcpy string-literals

3
推荐指数
1
解决办法
170
查看次数

用 tm 添加和减去时间

假设我将 tm 中的时间设置为 23:00:00

ptm->tm_hour = 23; ptm->tm_min = 0; ptm->tm_sec = 0;
Run Code Online (Sandbox Code Playgroud)

我想允许用户从中减去时间

ptm->tm_hour -= hourinput; ptm->tm_min -= minuteinput; ptm->tm_sec -= secondinput;
Run Code Online (Sandbox Code Playgroud)

如果用户减去 0 小时 5 分 5 秒,则不会显示为 22:54:55,而是显示为 23:-5:-5。

我想我可以做一堆 if 语句来检查 ptm 是否低于 0 并解释这一点,但是有没有更有效的方法来获得正确的时间?

c++ time time-t

3
推荐指数
1
解决办法
1678
查看次数

以下c程序的输出为-10的原因

#include <stdio.h>

int main() {
    unsigned int a = -10;
    printf("a=%d\n", a);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是打印-10签名int.如果签名和未签名都打印,-10那么它们之间有什么区别?

c printf format-specifiers unsigned-integer

3
推荐指数
2
解决办法
108
查看次数

为什么我的思想在这里泛滥成灾?

当打印来自用户的读取输入的值时,数字下溢和溢出,我不明白为什么。

因此,我正在通过ansi C标准来选择c作为一种语言,并且我不明白为什么这会导致前两个值下溢和溢出。

int c; 
 int nl, bl, tab= 0; 
  while ((c = getchar())!= EOF){
    if (c == '\n'){
      ++nl;
    }
    if (c == ' '){
      ++bl;
    }
    if (c == '\t'){
      ++tab;
    }
    printf("%d\t %d\t %d\n", nl, bl, tab);
  }
Run Code Online (Sandbox Code Playgroud)

c integer initialization

3
推荐指数
1
解决办法
78
查看次数

为什么第二个角色对第二个变量迷路

我有2个char类型的变量。

char desc[30];
char code[2];
cout << "Enter values : "<<"\n";
cin.getline(desc,30);
cin.getline(code,2);

cout << "\nValues Entered: "<<"\n";
cout << desc <<"\t";
cout << code <<"\n";
Run Code Online (Sandbox Code Playgroud)

当按如下所示提供输入值时,第二个变量的第二个字符将丢失。我尝试了cin>>markscin.get(marks,2),但是行为始终相同。

输入值:
这是一条测试线
LH

输入的值:
这是测试线L

进程返回0(0x0)执行时间:11.285 s
按任意键继续。

在上面的示例中,即使输入为LH,在输出中也只有'L'可用而'H'丢失了。有人可以告诉我这里有什么问题吗?

c++ string char getline

3
推荐指数
1
解决办法
69
查看次数

gcc编译器报告警告,但a.out工作顺利

我正在关注"C Primer Plus"一书并遇到这样一段代码:

// designate.c -- use designated initializers
#include <stdio.h>
#define MONTHS 12
int main(void) 
{
    int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
    int i;

    for (i = 0; i < MONTHS; i++)
        printf("%2d %d\n", i+1, days[i]);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它在编译时报告错误:

$ cc designate.c
designate.c:6:57: warning: initializer overrides prior initialization of this subobject [-Winitializer-overrides]
    int days[MONTHS] = {31, 28, [4] = 31, 30, 31, [1] = 29};
                                                        ^~
designate.c:6:29: note: previous initialization is …
Run Code Online (Sandbox Code Playgroud)

c array-initialization designated-initializer

2
推荐指数
1
解决办法
56
查看次数

用C++理解C++中的删除

我正在阅读我正在阅读的C++书籍中的以下代码片段.

int* operator=(const int& rhs, int *x)
{
   int *tmpx=x              //line 1
   x = new int(2)           //line 2 
   delete tmpx;             //line 3
   return x;                //line 4                   
}
Run Code Online (Sandbox Code Playgroud)

我怀疑的是,如果我在第3行删除tmpx,它将地址保存到x指向的内存位置,并且删除将使内存地址无效,那么返回指向内存地址的x不是错误的在第3行获释?

c++ operator-overloading dynamic-memory-allocation

2
推荐指数
1
解决办法
113
查看次数

为什么{0}分配有效但数组不为{5}

我尝试了以下代码:

int a[4] = {0};
int b[4] = {5};
int c[4];
printf("%d %d %d %d %d %d\n", a[0], a[3] , b[0], b[3], c[0], c[3]);
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

0 0 5 0 random random
Run Code Online (Sandbox Code Playgroud)

虽然我得到了为什么我得到了c数组的随机值,我不明白为什么分配{5}不起作用{0},只是初始化数组的第一个元素.

有没有办法将数组b元素初始化为不同于0的相同值?(不使用memset或for循环)

c arrays array-initialization

2
推荐指数
1
解决办法
124
查看次数

如果我在代码的printf部分中使用%s代替%c,则代码背后的解释

因此,我对以下解释感到好奇,如果我在printf部分使用%s,为什么我的代码会得到不同的结果。我知道工作的人应该使用%s代替%c。

#include <stdio.h>

int main() {
    int i;
    char str1[12] = "Hello world!";
    printf("str1==%c\n", str1); 
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我尝试多次编译它,并且在两次之间得到一些不同的结果:str1 == ?、 str1 ==,str1 ==(此空白实际上是该站点无法显示的某些图标)

c c++ printf

2
推荐指数
2
解决办法
133
查看次数

C ++:该代码可编译,但引发运行时检查失败#2-变量'num'周围的堆栈已损坏。发生

当代码执行变量num获取值时'9',就会发生错误。

char num = 'A';
int* pnum = (int *)&num;
*pnum = '9';
Run Code Online (Sandbox Code Playgroud)

错误是什么意思?

c++ pointers casting runtime-error char

2
推荐指数
1
解决办法
45
查看次数