所以,我在这个网站上看到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)
我究竟做错了什么?
我试图从给定的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 ++中的方程?
我正在尝试实施字典.如果您在我的代码中发现缺陷而不是改变整个逻辑,我将不胜感激.
样本输入
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) 我想要做的是使用宏访问代码.但编译器给了我这个错误
标识符"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-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因为我只是复制粘贴代码,而实际上,我使用正确的方法.
我有一些整数变量,我把它们命名n0为n9.我想使用循环访问它们.我试过这段代码来做到这一点:
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)
我知道这不是正确的方法,但我不知道如何正确地做到这一点.