为什么8位字段具有字节序?

请参阅/netinet/tcp.h中TCP头的定义: struct tcphdr { u_int16_t th_sport; /* source port */ u_int16_t th_dport; /* destination port */ tcp_seq th_seq; /* sequence number */ tcp_seq th_ack; /* acknowledgement number */ # if __BYTE_ORDER == __LITTLE_ENDIAN u_int8_t th_x2:4; /* (unused) */ u_int8_t th_off:4; /* data offset */ # endif # if __BYTE_ORDER == __BIG_ENDIAN u_int8_t th_off:4; /* data […]

为什么’extern’存储类在函数中的工作方式不同?

以下代码段正常 extern int i; int i; int main(){ return 0; } 我得到的是,’i’被声明然后被定义。 由于只有一个定义,所以完全没问题。 int main(){ extern int i; int i; return 0; } 现在,上面的一个给出了以下错误 new.cpp: In function ‘int main()’: new.cpp:5:6: error: redeclaration of ‘int i’ int i; ^ new.cpp:4:13: note: previous declaration ‘int i’ extern int i; 问题出在这里? 这里也有’i’的单一定义。

c中的文件处理没有产生所需的结果

我是文件处理的新手,当我尝试从键盘读取数据到文件并在屏幕上输出该文件的内容时,我没有得到所需的结果,下面的代码 /* get data from the keyboared till the end of file and write it to the file named “input” agian read the data from this file on to the screen*/ #include int main() { FILE *fp; char c; printf(“enter the data from the keyboared\n”); fp=fopen(“input.txt”,”w”); while((c=getchar()!=EOF)) { putc(c,fp); } fclose(fp); printf(“reading the data from […]

Haskell:Arch Linux上缺少的C库适用于Ubuntu

我最近将我的PC从Ubuntu转移到Arch Linux 。 我现在收到以下错误(我使用堆栈来构建我的项目): setup-Simple-Cabal-1.22.4.0-ghc-7.10.2:缺少对外部库的依赖: *缺少C库:HSrts-ghc7.10.2 通常可以通过安装提供此库的系统包来解决此问题(您可能需要“-dev”版本)。 如果库已经安装但是在非标准位置,那么您可以使用标志–extra-include-dirs =和–extra-lib-dirs =来指定它的位置。 据我所知,Linux发行版的不同之处不应该引起任何问题。 我尝试过的事情: – 添加库所在的路径–extra-lib-dirs – 确保stack / ghc的版本与两个系统都是相同的acrose 无法找到两个系统之间的相关差异 (gcc版本不同但没有改变任何东西) 我有一个基于ubutu的docker容器,它在没有问题的情况下构建。 我唯一能想到的是,这个库的处理方式与一些随机C库不同,因为它包含Haskell-Runtime。 但我不知道这种差异会是什么。 或者不同的处理如何导致我的Arch System出现问题。 这里我的.cabal文件(该文件夹还包含整个项目): https : //github.com/opencog/atomspace/blob/master/tests/haskell/libExecutionOutputTest/opencoglib.cabal

在c和内联汇编之间传递参数

我有一个关于在c和内联汇编之间传递参数的问题 我在将数组传递到内联汇编时遇到了麻烦。 我一直收到错误’错误:内存输入1无法直接寻址’ 以下是我的代码示例: void main() { char name[] = “thisisatest”; __asm__ (“\ .intel_syntax noprefix \n\ mov eax, %[name] \n\ inc (eax) \n\ ” :/*no output*/ :[name]”m”(name) ); } 这应该增加我的字符​​串的第一个字母(使它’u’),但它不会构建。 想法?

Valgrind警告:我应该认真对待它

背景:我有一个模仿fgets(character, 2, fp)的小例程,除了它从字符串而不是流中获取字符。 newBuff是动态分配的字符串,作为参数传递,字符声明为char character[2] 。 常规: character[0] = newBuff[0]; character[1] = ‘\0’; strcpy(newBuff, newBuff+1); strcpy在从中读取每个字符时复制信息丢失。 问题:Valgrind确实警告我这个活动,“源和目的地重叠在strcpy(0x419b818,0x419b819)”。 我应该担心这个警告吗?

令牌使用增量变量在c中粘贴

我有一组数组: msg1[] msg2[] …. msgn[] 。 我需要在while循环中使用这些值。 作为msgi[] 。 当我将它定义为#define MSG(a) msg##a并将其放入循环并递增i ,它会将其扩展为msgi ?

kbhit()双循环不能正常工作

只是为了好玩,我尝试用循环打印kbhit() ,以便按下按键后的程序无限打印该行,直到再次按下键盘。 它编译得很好,在运行时,只是给出了空白屏幕。 没有打印。 但是在单键按下结束程序。 虽然控制台没有关闭。 #include #include int main() { while(1) { if(kbhit()) { while(1) { if(kbhit()) { goto out; } printf(“Print Ed Infinitum Until Key Press”); } } } out: return 0; } 我该如何解决这个问题?

使用fgets从C中的文件中读取字符串

我试图从一个文件中读取字符串,该文件在新行上包含每个字符串,但我认为它只读取一行换行符而不是字符串,我不知道为什么。 如果我要以错误的方式阅读字符串,请纠正我。 i=0; F1 = fopen(“alg.txt”, “r”); F2 = fopen(“tul.txt”, “w”); if(!feof(F1)) { do{ //start scanning file fgets(inimene[i].Enimi, 20, F1); fgets(inimene[i].Pnimi, 20, F1); fgets(inimene[i].Kood, 12, F1); printf(“i=%d\nEnimi=%s\nPnimi=%s\nKaad=%s”,i,inimene[i].Enimi,inimene[i].Pnimi,inimene[i].Kood); i++;} while(!feof(F1));}; /*finish getting structs*/ printf是让我看到什么是什么,这是结果 i=0 Enimi=peter Pnimi=pupkin Kood=223456iatb i=1 Enimi= Pnimi=masha Kaad=gubkina i=2 Enimi=234567iasb Pnimi=sasha Kood=dudkina 正如您在第一个结构读取后所看到的那样,有一个空白(换行符?)onct然后一切都被移动了。 我想我可以读取一个虚拟的字符串来吸收额外的空白,然后什么都不会移动,但这并不能帮助我理解问题并避免将来使用。 编辑1:我知道它停在换行符但仍然读取它。 我想知道为什么它不会在第三个字符串中读取它并转移到第四个字符串而不是将第四个字符串作为源的第四行但它只发生一次。 顺便说一下,文件的格式是这样的 peter pupkin 223456iatb masha gubkina […]

指针减法和替代

使用数组时,标准算法(在C和C ++中)通常会返回指向元素的指针。 有时可以方便地获得元素的索引,也许是为了索引到另一个数组,我通常通过从指针中减去数组的开头来得到它: int arr[100]; int *addressICareAbout = f(arr, 100); size_t index = addressICareAbout – arr; 这总是看起来简单而有效。 但是,最近我指出指针减法实际上返回了一个ptrdiff_t ,原则上,如果“ index ”不适合ptrdiff_t ,可能会出现问题。 我真的不相信任何实施都会有足够的反对意见,允许一个人创建如此大的arr(从而引起这样的问题),但是这里接受的答案承认这是可能的,而且我没有发现任何其他证据。 因此,我已经辞职了(除非有人能说服我),并且会小心前进。 那个答案提出了一个相当复杂的“安全”获取索引的方法; 真的没有更好的吗? 也就是说,我对C ++中可能的解决方法感到困惑。 我们有std::distance ,但std::distance(arr, addressICareAbout)保证定义明确吗? 一方面,(指向第一个元素的指针) arr可以递增到达addressICareAbout (对吗?),但另一方面std::distance应该返回一个ptrdiff_t 。 标准容器的迭代器可能(可能)具有相同的问题。