如何在一定数量的小数位(没有舍入)后截断浮点数?

我试图以6点精度打印数字684.545007 , 因为在684.54之后数字被截断(不是舍入) 。 我用的时候 var = 684.545007; printf(“%.2f\n”,var); 它输出684.55 ,但我想得到的是684.54 。 有谁知道我怎么能纠正这个?

自动将进入/退出function日志添加到项目

我有第三方源代码,我必须调查。 我想知道调用函数的顺序,但我不想浪费时间输入: printf(“Entered into %s”, __FUNCTION__) 和 printf(“Exited from %s”, __FUNCTION__) 对于每个function,我也不想触摸任何源文件。 你有什么建议吗? 是否有一个编译器标志可以自动为我执行此操作? 澄清评论: 我将交叉编译源代码以在ARM上运行它。 我将用gcc编译它。 我不想分析静态代码。 我想跟踪运行时。 所以doxygen不会让我的生活更轻松。 我有源,我可以编译它。 我不想使用面向方面编程。 编辑:我发现gdb提示符中的’frame’命令在那个时间点打印当前帧(或者,你可以说是函数名)。 也许,每次调用函数时,都可以(使用gdb脚本)调用’frame’命令。 你怎么看?

strstr不起作用

如果我输入“test”,为什么这段特殊的代码在strstr()上返回false? char input[100]; int main() { fgets(input, 100, stdin); printf(“%s”, input); if(strstr(“test message”, input)) { printf(“strstr true”); } } 我认为strstr在第一个参数中搜索了第二个参数的实例? 当我用一些文本替换输入或直接分配它时,它可以工作,但它似乎不适用于fgets。

为什么对mmap的内存进行未对齐访问有时会在AMD64上出现段错误?

我有这段代码在AMD64兼容CPU上运行Ubuntu 14.04时会出现段错误: #include #include #include int main() { uint32_t sum = 0; uint8_t *buffer = mmap(NULL, 1<<18, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); uint16_t *p = (buffer + 1); int i; for (i=0;i<14;++i) { //printf("%d\n", i); sum += p[i]; } return sum; } 如果使用mmap分配内存,则仅此段错误。 如果我使用malloc ,堆栈上的缓冲区或全局变量,它不会发生段错误。 如果我将循环的迭代次数减少到少于14的次数,则不再是段错误。 如果我从循环内打印数组索引,它也不再是段错误。 为什么未对齐的内存访问能够访问未对齐地址的CPU上的段错误,为什么只有在这种特定情况下呢?

C在二进制文件的中间写入而不覆盖任何现有内容

今天的问题是我需要在起始位置的二进制文件中编写一个数字数组。 我有它应该开始的位置,我不想在此之后覆盖值,只是想将数组插入文件的起始位置。 例如: 12345 让我们在第2位推456: 12456345 我知道可能我必须自己实现它,但我想知道你对如何尽可能有效地实现它有什么看法。

获取CPU周期数?

我在SO上看到这篇包含C代码的post来获取最新的CPU周期数: 基于CPU周期计算的C / C ++ Linux x86_64中的分析 有没有办法在C ++中使用这段代码(欢迎使用windows和linux解决方案)? 虽然用C语言编写(而C是C ++的一个子集)但我不太确定这段代码是否适用于C ++项目,如果没有,如何翻译呢? 我使用的是x86-64 EDIT2: 找到此function但无法让VS2010识别汇编程序。 我需要包含任何内容吗? (我相信我必须将uint64_t交换为多long long的窗口……?) static inline uint64_t get_cycles() { uint64_t t; __asm volatile (“rdtsc” : “=A”(t)); return t; } EDIT3: 从上面的代码我得到错误: “错误C2400:’操作码’中的内联汇编语法错误;找到’数据类型’” 有人可以帮忙吗?

uninitiliazed变量如何获得垃圾值?

当我们创建一个变量并且不对其进行初始化时,会为其分配一些称为垃圾值的 (随机)数字。 如何将此值分配给变量? 这背后的整体概念/机制是什么? 这只发生在C吗?

C / C ++包括头文件顺序

应该指定哪些顺序包含文件,即将一个标题包含在另一个标题之前的原因是什么? 例如,系统文件,STL和Boost是在本地包含文件之前还是之后?

在C / C ++中从TCP套接字读取的正确方法是什么?

这是我的代码: // Not all headers are relevant to the code snippet. #include #include #include #include #include #include #include #include char *buffer; stringstream readStream; bool readData = true; while (readData) { cout << "Receiving chunk… "; // Read a bit at a time, eventually "end" string will be received. bzero(buffer, BUFFER_SIZE); int readResult = read(socketFileDescriptor, buffer, […]

通过pthread_create传递整数值

我只是想将一个整数的值传递给一个线程。 我怎样才能做到这一点? 我试过了: int i; pthread_t thread_tid[10]; for(i=0; i<10; i++) { pthread_create(&thread_tid[i], NULL, collector, i); } 线程方法如下所示: void *collector( void *arg) { int a = (int) arg; … 我收到以下警告: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]