小编Lun*_*din的帖子

如何在gcc中使用可变长度数组?

所以,我在这个网站上看到c ++不允许变长数组但gcc允许它.所以,我想测试一个小代码

#include<stdio.h>
#include<stdint.h>

void main()
{
    int8_t n;
    int8_t var_array[n];
    int8_t i;
    printf("Enter array size: \r\n");
    scanf("%d", &n);

    for(i=0; i<n; i++)
        var_array[i] = i;

    for(i=0; i<n; i++)
        printf("var_array[%d] = %d\r\n", i, var_array[i]);
}  
Run Code Online (Sandbox Code Playgroud)

代码在linux OS中用"gcc var_array.c -o var_array"命令编译但是当我运行它时,我得到分段错误错误

Enter array size:
5
Segmentation fault  
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c gcc

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

Char数组到数学方程

我试图从给定的char数组中解析数学方程式,例如char equation[255] = "4+4";,我想将第一个数字复制到long number1,运算符到char oper第二个数字long number2.

我已经尝试了,sscanf(equation, "%d%c%d", &number1, &oper, &number2);但它只是得到第一个数字,无法提取运算符和第二个数字.

试过这个方法:

while (isdigit(equation[k]))
    {
        k++;
    }                   
oper = equation[k];
Run Code Online (Sandbox Code Playgroud)

但它仍然没有得到运营商.有没有更简单的方法来解析c ++中的方程?

c arrays parsing

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

'由于超时而终止'.需要帮助优化我的代码

我正在尝试实施字典.如果您在我的代码中发现缺陷而不是改变整个逻辑,我将不胜感激.

样本输入
3
sam 99912222
tom 11122222
harry 12299933
sam
edward
harry

样品输出:
sam = 99912222
未找到
harry = 12299933

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

struct Dict {
  char key[100];
  int value;
};

struct Dict *array;
int inputsize;

int getHashKey(char *key){
  return strlen(key)%inputsize;

}

void insert(char *key, int value){
  int i =0;
  int hashkey = getHashKey(key);

  /* Already inserted. Return */
  if(!strcmp (array[hashkey].key,key)){
   return;
  }

  /* Check if empty space. else, Get the next available space. */ …
Run Code Online (Sandbox Code Playgroud)

c arrays dictionary

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

变体宏不起作用

我想要做的是使用宏访问代码.但编译器给了我这个错误

标识符"BUTTON___button"未定义

#define BUTTON_1                HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8)
#define BUTTON_2                HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_9)
#define BUTTON_3                HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4)
#define BUTTON_4                HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5)
#define BUTTON_5                HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13)
#define BUTTON_6                HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_14)
#define BUTTON_7                HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_12)
#define BUTTON_8                HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_11)
#define BUTTON_9                HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_15)
#define BUTTON_10               HAL_GPIO_ReadPin(GPIOD, GPIO_PIN_0)
#define BUTTON_11               HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_10)
#define BUTTON_12               HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_15)
#define BUTTON_13               HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1)
#define BUTTON_14               HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_2)
#define BUTTON_15               HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11)
#define BUTTON_16               HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2)
#define BUTTON_17               HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_0)
#define BUTTON_18               HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_1)
#define BUTTON_19               HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5)
#define BUTTON_20 …
Run Code Online (Sandbox Code Playgroud)

c macros variadic-macros

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

程序不应该按照"C faq"工作,但它有效

c-faq当我遇到这个页面时,我正在经历这个问题.我说以下程序将有一个核心转储:

struct list {
    char *item;
    struct list *next;
}

/* Here is the main program. */

main(argc, argv)
{}
Run Code Online (Sandbox Code Playgroud)

他们告诉核心转储发生的原因是:

结构声明结尾处缺少分号会导致main被声明为返回结构.(由于介入的注释,很难看到连接.)由于结构值函数通常是通过添加隐藏的返回指针来实现的(参见问题2.9),所以生成的main()代码尝试接受三个参数,尽管只有两个传递(在这种情况下,通过C启动代码).另见问题10.9和16.4.

虽然,当我跑这个节目在网上在这里,它的工作完美,程序也运行到最后.另外,当我使用gcc编译这个程序时,我没有收到任何警告.

我很惊讶,因为程序应该没有运行到最后.有人能告诉我为什么这个程序有效吗?如果它是正确的,为什么提到该程序将无法工作(任何可能崩溃的机会?).

注意:请不要发表评论如使用,int main因为我只是复制粘贴代码,而实际上,我使用正确的方法.

c coredump

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

如何根据循环索引访问任何变量名称

我有一些整数变量,我把它们命名n0n9.我想使用循环访问它们.我试过这段代码来做到这一点:

int n0 = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0; 
int n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0;    

for(i = 0; i < 10; i++){
    if(digit == 1){
        n[i] = n[i] + 1;
    }               
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是正确的方法,但我不知道如何正确地做到这一点.

c

-9
推荐指数
2
解决办法
120
查看次数

标签 统计

c ×6

arrays ×2

coredump ×1

dictionary ×1

gcc ×1

macros ×1

parsing ×1

variadic-macros ×1