小编Him*_*rav的帖子

&((struct name*)NULL - > b)在printf语句中

我在一本书中找到了这个代码示例,但是我无法理解printf语句中的表达式.并且这个程序成功编译输出为4.友好建议...

void main(){
    unsigned char c;

    typedef struct name {
      long a;
      int b;
      long c;
    }r;

    r re = {3,4,5};
    r *na=&re;

    printf("%d",*(int*)((char*)na + (unsigned int ) & (((struct name  *)NULL)->b)));
}
Run Code Online (Sandbox Code Playgroud)

c struct casting offsetof

9
推荐指数
1
解决办法
311
查看次数

vmware工作站中的自定义Linux内核构建失败

在尝试编译/构建和启动vmware工作站内的自定义内核时,在启动新内核时,它会失败并且因为"无法通过uuid找到磁盘"而出现错误.我用ubuntu和centos试过这个.


我尝试但没有帮助的事情


  1. 检查uuid在启动项中的映射以及目录中是否存在.
  2. initramfs的更新
  3. 用/ dev/disk/sda3替换了root = uuid = <>

在此输入图像描述

它与vmware工作站有关吗?怎么能纠正.. ??

linux-kernel vmware-workstation ubuntu-15.04

6
推荐指数
1
解决办法
1338
查看次数

Eudyuptula Task3 的意思是“当您提供创意示例时,特别是在您当地的酒吧以解说舞的形式完成时,会得到额外的饼干。”

我正在尝试通过 eudyptula 挑战,但我很难理解这条线

“当您提供有创意的例子时,额外的饼干,尤其是在当地酒吧的解说舞中。”

什么是预期?

以下是对上下文的完整挑战——


这一轮的任务是: – 从任务 02 中取出内核 git 树并更改 Makefile 以修改 EXTRAVERSION 字段。以运行内核(在修改 Makefile、重建和重新启动后)在版本字符串中包含字符“-eudyptula”的方式执行此操作。– 显示启动此内核的证据。“当您提供有创意的例子时,额外的饼干,尤其是在当地酒吧的解说舞中。”

这是一个笑话,还是某种谜题:D

linux eudyptula-challenge

5
推荐指数
0
解决办法
126
查看次数

当我们有值而不是指针时,如何检查空指针解除引用

C语言中gmtime函数的语法是:

struct tm *gmtime(const time_t *timer);
Run Code Online (Sandbox Code Playgroud)

通常打电话给gmtime会

tm *xx = gmtime( &curr_time );
Run Code Online (Sandbox Code Playgroud)

这将更容易检查gmtime函数是否返回NULL指针.

if (xx)
    return sucess;
Run Code Online (Sandbox Code Playgroud)

但它并不安全,因为返回值指向静态分配的结构,可能会被后续调用任何日期和时间函数覆盖.


所以更安全的方法之一就是使用

time_t curr_time = time(0);
tm xx = *gmtime( &curr_time );
Run Code Online (Sandbox Code Playgroud)

但如果调用是这样的话

如何在解除引用xx变量之前检查null?

"不安全"来源 - https://linux.die.net/man/3/gmtime

c time pointers dereference

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

C语言中的二维数组

我将一个2d数组传递给一个函数来打印输出,但我得到的输出是错误的


功能

void PrintArray(unsigned char mat[][4]){
    int i, j;
    printf("\n");
    for(i = 0;i<4;i++){
        for(j = 0;j<4;j++)
                printf("%3x",mat[i][j]);

        printf("\n");
    }
    printf("\n");
}
Run Code Online (Sandbox Code Playgroud)

主功能

int main(){

int i,j;
//static int c=175;
unsigned char  state[4][4], key[4][4], expandedKey[176];


printf("enter the value to be decrypted");
for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        scanf("%x",(unsigned int *)&state[j][i]);
PrintArray(state);

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

预期产出

  1  5  9  c   
  2  6  0  d 
  3  7  a  e
  4  8  b  f
Run Code Online (Sandbox Code Playgroud)

实际产出

h2o@h2o-Vostro-1015:~$ ./a.out enter the value to be decrypted 1 2 3 4 5 …
Run Code Online (Sandbox Code Playgroud)

c arrays

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