将base 4代码转换为字母

即时通讯工作我有一个assmebler项目,我需要翻译二进制机器代码,我有一个“奇怪的”4基本代码,例如,如果我得到这样的二进制代码“0000-10-01-00”我应该翻译它到“aacba” 00 =一 01 = B 10 = C 11 = d 我已设法将代码翻译成4个基本代码,但我不知道如何从那里继续,或者如果这是正确的方法,… 在下面添加我的代码 void intToBase4 (unsigned int *num) { int d[7]; int j,i=0; double x=0; while((*num)>0) { d[i]=(*num)%4; i++; (*num)=(*num)/4; } for(x=0,j=i-1; j>=0; j–) { x += d[j]*pow(10,j); } (*num)=(unsigned int)x; }

为什么fgets卡在回车上\ r?

我是新来的论坛和c一般,所以请耐心等待我。 我正在尝试编写一个带有文本文件并解析所有单词和字符的ac程序,然后将它们保存到输出文本文件中。 我正在使用C99,Windows 7-64bit,MinGW,记事本,记事本++和用于txt文件的ASNI格式。 我已经读过fgets()比fscanf用于读取输入更好,因为它有缓冲区溢出保护,所以我决定尝试使用它,但它在测试文件中有一些标点符号的问题(我认为这是回车\ r)。 我尝试使用fscanf,除了它跳过所有空格(我可以在以后添加,不关心它),它似乎接受所有文本就好并将其打印在输出文件中。 这是我的测试代码: #include #include #include #include #include void main(int argc, char* argv[]) { int limit=100, flimit=0, flimitmax=1900000000; //I stopped flimitmax short of the 2GB mark char name[limit], copyname[limit]; FILE *data, *output; //Gets the value of a specified data file for reading printf(“\nPlease specify a file to format for data […]

什么时候堆栈分配

即使在C(不仅仅是C ++)中,您也可以在代码块的开头声明变量,该代码块用大括号括起来。 例: #include void use_stack(int cnt) { if (cnt<=16) { int a[16]; int i; a[0]=3; a[1]=5; for (i=2;i<cnt;i++) { a[i]=a[i-1]+a[i-2]; } printf("a[%d] == %d\n",cnt-1,a[cnt-1]); } else { printf("cnt is too big\n"); } } 现在我知道像数组a[16]这样的变量在这种情况下被分配在堆栈上。 我想知道这个数组的空间是在函数的开头(第一个打开花括号)还是在声明它的块的开头分配(在if之后打开花括号)。 从检查汇编代码开始,编译器似乎直接在函数入口处为a[16]分配空间。 我实际上期望在a[16]的声明处分配堆栈(堆栈指针减少),并且堆栈将在相应的if代码块的末尾被解除分配(堆栈指针增加)。 但是这似乎没有发生(即使在a[16]分支中没有使用a[16] , a[16]堆栈直接在函数入口处分配)。 有没有人解释为什么会这样? 那么是否有C语言标准的任何部分,它解释了这种行为,或者是否与“longjmp”或信号处理有关,这可能要求堆栈指针在函数内部是“常量”? 注意:我假设堆栈的原因是在代码块的开头/结尾分配/解除分配,因为在C ++中,在堆栈上分配的对象的构造函数/析构函数将在代码块的开头/结尾处调用。 因此,如果您检查C ++程序的汇编代码,您会注意到堆栈仍然在函数入口处分配; 只是构造函数/析构函数调用将在代码块的开始/结束时完成。 我明确感兴趣的是为什么堆栈没有使用花括号在代码块的开头/结尾分配/解除分配。 问题: 在什么时刻是本地变量分配存储? 仅涉及在函数开始时分配的局部变量。 我很惊讶稍后在代码块内分配的变量的堆栈分配也在函数入口处完成。 到目前为止,答案是: 与优化有关 […]

使用C中的指针进行2D数组操作

假设我有一个操作2D数组的函数,该数组从主函数接收指向2D数组的指针作为其参数。 现在,我想修改(假设每个元素添加10个)2D数组的每个元素。 我有兴趣知道使用给我的单个指针遍历2D数组并返回新修改的数组的指针。 粗糙的结构 假设指针a包含2D数组的初始地址。 int add_10(int *a) { int i, j, b[M][N] = {0}; for(i = 0; i < M; i++) for(j = 0; j < N; j++) b[i][j] = 10 + a[i][j]; }

C – 如何调用链表中的第一个元素?

我想要一个链表来排序,然后能够显示它。 我的代码的问题是,我可以在排序之前显示它,但在排序后,它将不会显示,它将崩溃。 我认为它与“top”变量有关,因为通过调试,它不包含任何内容。 如何调用链表中的第一个元素并使用它来显示它们? 我真的很困惑。 以下仅是显示和排序function。 //Sort and display all employees void displayAllEmps() { if(numEmps == 0) { printf(“No employees are hired.”); fflush(stdout); } else { char output[80]; struct EMP* emp = top; int i; for(i = 1; i next; } } } //Sort function to call insertion sort function void sortEmps() { temp = […]

如何在C中初始化指向指针的指针

所以我得到了这个包含2个字段的struct Node : DataP data , void * key , DataP只是void*的typedef 。 我创建了一个双指针Node **table ,使其像2D数组一样。 我无法想象如何malloc它,我希望这个双指针充当2D数组,其中2为行数,x为cols数。 我试过table = (Node**)malloc(sizeof(Node*)*2); 但这是对的吗? 我该如何从这里继续?

在C中拆分未加引号的字符串

我正在编写一个函数将字符串拆分为指向指针的指针,如果separator是空格,我想只拆分不在引号内的单词。 例如Hello world “not split”应该返回 Hello world “not split” 不知何故,该函数将引号内的单词拆分,并且不会在引号之外拆分单词。 #include #include #include int is_quotes(char *s) { int i; int count; i = 0; count = 0; while (s[i]) { if (s[i] == ‘”‘) count++; i++; } if (count == 0) count = 1; return (count % 2); } int count_words(char *s, char sep) { […]

将字符串从文件存储到数组

我已经从两个文件中读取了字符串并将它们存储到两个独立的数组中,然后我尝试对它们进行排序并将它们写入另一个文件中…这部分按照它应该的方式工作,但我真正需要做的是组合字符串从两个数组到一个,以便我可以按字母顺序对它们进行排序,然后写入文件,但问题是,当我尝试将这两个数组存储到一个数组中时,我得到分段错误作为错误消息。我真的不知道如何将这两个数组存储到另一个数组,以便我可以按顺序排序…我知道如何排序它我只是不知道如何将这些读入另一个数组…我不能使用#DEFINE因为我将把所有这些写成测试代码的函数… 我尝试过类似的东西 new [i] = str; 并且: 的strcpy(新[I],STR) 但这些都不起作用……我们将非常感谢任何帮助…… 这是我的代码: #include #include main (void) { char str[200]; char str2[300]; char new[300]; char temp [300]; int linenumber=0; FILE *fa = fopen (“book1.dat”, “r”); FILE *fb = fopen (“book2.dat”, “r”); FILE *fc = fopen (“fixed.txt”, “w”); int i=0; int j=0; int k; /*read the strings into an […]

C错误,需要帮助

我有这个最后的工作项目,我过去几天一直在做,我吓坏了,因为截止日期在这里,我无法找到我的代码有什么问题,我做的一切给了我“分段错误”错误,但是当我编译它不会给我任何错误。 这是以下代码的链接: http : //pastebin.com/tqWc6Dd0这里是代码本身:(但我建议使用链接,忽略评论,葡萄牙语乱码)。 #include #include typedef struct{ char nomenavio; int codigonavio; char tiponavio; int tonelagemnavio; int anonavio; char paisnavio; char armadornavio; }NAVIO; typedef struct{ int numportos; int milhas; int tonelagemtotal; int consumototal; }TOTAL; ///////////////////////////////////////////////////////////&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCOES DE MENUS///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int menuprincipal(){ int controlo=0; printf(“\n Ola, escolha a opcao desejada:\n\t1-ADICIONAR NOVO NAVIO\n\t2-CARREGAR FICHEIROS\n\t3-LISTAR\n”); scanf(“%d”, &controlo); […]

Scanf输入转移到下一个scanf

我在这里有一个代码,在输入带空格的字符串时会有一些不需要的行为。 例如print illegal_argument 。 当有多个单词的输入进来时,我希望它只注册第一个单词。 目前发生的是: christian@oblig2 $ print 0 Enter router ID for information > ID: 0, flag: f7, model_length: 13, model: D-Link y6000 它在命令循环中注册第一个用于比较的print 。 但是,而不是scanf提示用户输入下一个输入,而是忽略该操作,并取消用户从前一个scanf输入的第二个字/数字。 我想要发生的是: christian@oblig2 $ print 0 Enter router ID for information > 0 ID: 0, flag: f7, model_length: 13, model: D-link y6000. 一切都按预期工作,但我想知道是否有更简单的方法来做到这一点。 我尝试过使用Strtok,没有太多运气。 char input[256]; printf(“%s@oblig2 $ […]