相关疑难解决方法(0)

使用未定义的指针分配内存

gcc -Wall没有警告的情况下编译时我很惊讶.这真的是合法的C吗?编写这样的代码有什么风险?

#include <stdio.h>
#include <stdlib.h>

typedef struct {
  int a;
  int b;
} MyStruct;

int main(void) {
  MyStruct *s = malloc(sizeof(*s)); // as opposed to malloc(sizeof(MyStruct))
  s->a = 5;
  printf("%d\n", s->a);
}
Run Code Online (Sandbox Code Playgroud)

c

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

为什么我被允许在C中使用const限定变量作为数组大小?

当我运行以下代码时,它适用于C:

#include<stdio.h>

int main(void)
{

const int x=5;
char arr[x];
printf("%d",sizeof(arr));

}
Run Code Online (Sandbox Code Playgroud)

但是,不仅我之前读过const合格的变量不是real常量(这就是为什么它们不能在case条件下使用switch-case),但IBM的以下链接证实了(IBMLINK)并说:

 const int k = 10;
 int ary[k];     /* allowed in C++, not legal in C */
Run Code Online (Sandbox Code Playgroud)

为什么我允许const在C中使用合格变量作为数组大小而没有任何错误?

c arrays const constants lifetime

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

在c中的sizeof函数内部赋值

foo(a = b+c);
//new value of a(after the call) = b+c
//but
sizeof(a = b+c);
//new value of a = old value of a
Run Code Online (Sandbox Code Playgroud)

为什么在后一种情况下,赋值语句的结果不会反映在函数的堆栈中(包含上面的代码)?

c sizeof

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

在C中获得varargs的大小?

我试图将一些Java代码转换为C. Java代码如下所示:

public static int minimum( int... minimum ) {

    assert( minimum.length > 0 );

    if ( minimum.length > 0 )
     .... // some code that i am able to translate to C without any hassle
}
Run Code Online (Sandbox Code Playgroud)

现在我通过使用stdarg.h标头并使用提供的宏来了解如何在C中使用varargs .但是我很难做到这一点minimum.length.

我试过strlen但是终端给了我一个与指针转换警告不兼容的整数.在C中有什么方法可以复制与Java相同的东西吗?

c variadic-functions

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

我认为sizeof的参数是针对可变长度数组进行评估的

请考虑一下

#include <stdio.h>

int main(void) {    
    int size = 1;
    int foo[1];
    int bar[size];

    int* pfoo = 0;
    int* pbar = 0;

    printf("%zu %zu\n", sizeof(pfoo = foo), sizeof(pbar = bar));
    printf("%p %p\n", pfoo, pbar);

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

https://ideone.com/VeiJXH上运行时的输出是

8 8

(无)(零)

我期望pbar被设置为第一个元素的地址bar,因为它bar是一个可变长度数组.我认为sizeof在运行时对可变长度数组进行了评估,这意味着pbar它将是非零的.

这是怎么回事?这不是一个小测验; 这是我在代码中遇到的问题的简化版本.

编辑:我不认为副本有帮助 - 我的问题是关于sizeof不被评估为可变长度数组.

c

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

标签 统计

c ×5

arrays ×1

const ×1

constants ×1

lifetime ×1

sizeof ×1

variadic-functions ×1