Tag: ansi

ANSI C动态内存分配以及何时应该释放内存

我试图了解内存分配并在ANSI C中释放它们。问题是我不知道何时释放它们。 1)程序是否自由释放已分配的内存(即使我没有通过free() )? 2)假设我的代码是这样的:(请不要担心这些结构的完整代码。我只关注逻辑) snode = (stock_node *) realloc(snode, count * sizeof(stock_node)); struct stock_list slist = { snode, count }; stock_list_ptr slist_ptr = (stock_list_ptr) malloc(sizeof(stock_list_ptr)); slist_ptr = &slist; tm->stock = slist_ptr; 所以上面; snode转到stock_list,stock_list转到slist指针,然后转到tm-> stock。 现在,因为我已经将它们全部分配给了tm-> stock,我是否必须释放snode和slist_ptr? 因为tm struct将用于程序的其余部分。 如果我免费使用snode和slist_ptr将tm结构丢失值?

另一个“为什么我的Uva 3n + 1解决方案不被接受?”问题

为什么我的解决方案失败了? http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=3&page=show_problem&problem=36 我在假设stdin是数据源的情况下编写了这个。 我完全相信这是我的代码的一个问题,但我很遗憾为什么我得到’错误的答案’作为结果。 (编译器选择是ANSI C) 编辑:修改为允许参数1>参数2(但现在我得到“演示错误”无论是什么) #include #include int main(int argc, char * argv[]) { unsigned int p1; unsigned int start; unsigned int end; unsigned int current; unsigned int n; unsigned int p2; unsigned int max_cycle = 0; unsigned int current_cycle; while(scanf(“%u %u”, &p1, &p2) != EOF){ max_cycle = 0; start = (p1 < […]

如何使用ANSI转义序列设置棕色?

我可以只使用序列Esc[Value,Valuem来设置背景的棕色吗? (不仅是黑色,红色,绿色,黄色,蓝色,洋红色,青色,白色…我想要使用更多颜色)。 如何轻松实现? 我想在我的启动代码中实现它,所以我没有机会使用标准库。 我应该使用哪些参数?

使用qsort对2D数组进行排序

我正在尝试排序2d数组。 首先,我按列排序,然后按行排序。 逐列工作但不是逐行。 这段代码有什么问题? int scmpr (const void *a, const void *b){ return strcmp((const char*)a, (const char*)b); } int main(void){ int i,j; char **tab; tab=(char**)malloc(sizeof(char*)* 10); for(i=0; i<10; i++){ tab[i]=(char*)malloc(sizeof(char)*15); } for(i=0; i<10; i++){ for(j=0; j<15; j++){ tab[i][j]=rand()%20+'b'; printf("%c ", tab[i][j]); } puts(""); } for (i = 0; i<10; i++){ qsort(&tab[i][0], 15, sizeof(char), scmpr); } […]

如何避免在使用此配置的每个函数中传递配置变量

如何避免在使用此配置的每个函数中传递“config”变量。 做出这种行为的最准确方法是什么。 这是我的代码:main.c /* Complex Numbers Linking to proper variable */ typedef struct tagConfigNames { char name; complex *cnum; } config_names; /* Set command to function */ struct { char *name; void (*func)(config_names[]); } cmd[] = {{“read_comp”, read_comp}, {“print_comp”, print_comp}, {“halt”, halt},{“not_valid”, NULL} }; int main() { complex a,b,c,d,e,f; config_names cnumbers []= {{‘a’, &a}, {‘b’, […]

从数字中获取最大值和最小值

我需要从数字中打印最大和最小数字。 问题是,当我将mn和mx设置为0时,它就不会工作,因为当用户写入数字时,1 2 3 4 5最小值为0而不是1,这就是问题所在。 我的代码: #define _CRT_SECURE_NO_WARNINGS #include int main() { int x, mx = 0, mn = 0; int i = 1, n; scanf(“%d”, &n); for (i = 1; i mx) { mx = x; }; if (x < mn) { mn = x; }; }; printf("minimum is: %d", mn); printf("maximum is: […]

GCC makefile不接受-std = c99 -lm

我用gcc编译器的makefile有问题。 如果我直接使用gcc: gcc -std=c99 -lm tm.c tm_coins.c tm_options.c tm_stock.c tm_utility.c -o tm -Wall -pedantic 一切正常。 我需要-std-c99和-lm。 但是,我被告知使用makefile。 这是我的make文件: CFLAGS=-ansi -Wall -pedantic LFLAGS=-std=c99 -lm CC=gcc all:tm tm:tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o $(CC) $(LFLAGS) tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o -o tm $(CFLAGS) tm.o: tm.h tm.c $(CC) $(LFLAGS) $(CFLAGS) -c tm.c tm_coins.o:tm_coins.h tm_coins.c $(CC) $(LFLAGS) $(CFLAGS) -c tm_coins.c […]

转换为仅在运行时已知的类型

假设我有以下内容: void *pA; 现在我希望在运行时将此指针转换为在编译时未知的类型。 即什么是等效或如何在ANSI C中模拟c ++ dynamic_cast? 谢谢 !

搜索字符串数组中的字符串

我一直在变坏指针。 谁能告诉我我做错了什么? int SearchString( char* arr[], char* key, int size ) { int n; for ( n = 0; n < size; ++n ) { if ( strcmp(arr[n], key) ) { return n; } } return -1; } char str[][16] = { “mov”,”cmp”,”add”,”sub”,”lea”,”not”,”clr”,”inc”,”dec”,”jmp”,”bne”,”red”,”jrn”,”psr”,”rts”,”stop”}; if(SearchString(str,”word”,16) == -1){ return FALSE;}

validationscanf参数

我需要validationscanf参数,例如 if (scanf(“%c,%f,%f”, &ch, &p1, &p2) != 3) // How can I tell which parameter failed? // If I want to output message such as “Second parameter must be a real nubmer”.