标签: c

将float + INF,-INF和NAN转换为C中的整数的结果是什么?

是否有任何标准规定了输出应该是什么?

例如这段代码:

#include <stdio.h>
#include <math.h>

int main(int argc, char** argv) {
  float a = INFINITY;
  float b = -INFINITY;
  float c = NAN;

  printf("float %f %f %f\n", a, b, c); 
  printf("int %d %d %d\n", (int) a, (int) b, (int) c); 
  printf("uint %u %u %u\n", (unsigned int) a, (unsigned int) b, (unsigned int) c); 
  printf("lint %ld %ld %ld\n", (long int) a, (long int) b, (long int) b); 
  printf("luint %lu %lu %lu\n", (unsigned long int) a, (unsigned long int) b, (unsigned …
Run Code Online (Sandbox Code Playgroud)

c math standards

12
推荐指数
1
解决办法
6842
查看次数

将二进制数据(从文件)读入结构

我正在从文件中读取二进制数据,特别是从zip文件中读取.(要了解有关zip格式结构的更多信息,请参阅http://en.wikipedia.org/wiki/ZIP_%28file_format%29)

我创建了一个存储数据的结构:

typedef struct {
                                            /*Start Size            Description                                 */
    int signatute;                          /*   0  4   Local file header signature = 0x04034b50                */
    short int version;                      /*  ?4  2   Version needed to extract (minimum)                     */
    short int bit_flag;                     /*  ?6  2   General purpose bit flag                                */
    short int compression_method;           /*  ?8  2   Compression method                                      */
    short int time;                         /*  10  2   File last modification time                             */
    short int date;                         /*  12  2   File last modification date                             */
    int crc;                                /* …
Run Code Online (Sandbox Code Playgroud)

c zip byte

12
推荐指数
3
解决办法
1万
查看次数

睡在线程中(C/POSIX线程)

我正在开发一个使用POSIX线程的多线程应用程序.我正在使用线程来做一个定期的工作,为此我使用usleep(3)暂停线程执行.我的问题是如何从主线程取消usleep()计时器,我试过pthread_kill(thread, SIGALRM)但它具有全局效果,导致主应用程序终止(默认情况下).这是我的伪代码:

void threaded_task(void *ptr) {
    initialize();

    while(running) {
        do_the_work();
        usleep(some_interval);
    }

    clean_up();
    release_resources();
}
Run Code Online (Sandbox Code Playgroud)

这里是伪函数,用于从主线程停止(并正常关闭)给定线程:

void stop_thread(pthread_t thread) {
    set_running_state(thread, 0); // Actually I use mutex staff
    // TODO: Cancel sleep timer so that I will not wait for nothing.
    // Wait for task to finish possibly running work and clean up 
    pthread_join(thread, NULL);
}
Run Code Online (Sandbox Code Playgroud)

实现目标的便捷方式是什么?我是否必须使用条件变量,或者我可以使用sleep()变体吗?

c multithreading sleep pthreads usleep

12
推荐指数
3
解决办法
2万
查看次数

使用C中的utime在UNIX上获取文件修改时间

一位教授告诉我,你可以使用utime.h获得文件的最后修改时间.但是,手册页似乎引用了utime()仅设置此值.如何在UNIX系统上查找上次在C中更改文件的时间?

c unix file unix-timestamp

12
推荐指数
1
解决办法
1万
查看次数

12
推荐指数
1
解决办法
7424
查看次数

在嵌入式C应用程序中从Perl调用C函数

好吧,这是一个非常有趣的问题,并且可能没有任何简单的方法可以做到这一点,但想到我会在决定修改Perl是我的基本答案之前抛弃它.

所以我有一个以嵌入式方式调用Perl脚本的C应用程序.这一切都很好,花花公子,我可以传递信息并获取信息非常棒.然而,现在进入我的下一次征服; 我需要允许我的嵌入式脚本能够调用原始C叫它的C应用程序中的一些函数.

这很重要,因为XSUB会要求它是一个外部库; 但我不希望它是一个外部库我希望它是对C函数的直接调用.现在也许这可以通过XSUB完成,我刚刚阅读并理解错误.

Application -(run)-> Perl

Application <-(function_x())- Perl

Application -(returnfunction_x)-> Perl
Run Code Online (Sandbox Code Playgroud)

这不能是外部库的原因是因为我依赖于仅在应用程序中创建/存储的数据.

c perl perl-xs

12
推荐指数
1
解决办法
2317
查看次数

适用于C和C++的最佳调试工具

我在UNIX上从事C/C++工作,经常看到核心文件.很多时候核心文件很难调试,以找到核心或分段错误的实际原因.你能建议我一个高效的调试器吗?

c debugging

12
推荐指数
3
解决办法
2万
查看次数

在C中初始化字符串的正确方法

我见过人们的代码是:

char *str = NULL;
Run Code Online (Sandbox Code Playgroud)

而且我也看到了这一点,

char *str;
Run Code Online (Sandbox Code Playgroud)

我想知道,初始化字符串的正确方法是什么?什么时候你应该初始化一个字符串w /和w/out NULL?

c string char

12
推荐指数
3
解决办法
7万
查看次数

GCC的NetBeans设置

当我点击项目属性时,我可以设置Warning level(More Warnings)和Command Line -> Additional Options(-std=c99).但我希望我的所有C项目默认都有这种选项,而不是每次创建新项目时都手动设置它们.

截图

c gcc netbeans mingw makefile

12
推荐指数
2
解决办法
6177
查看次数

使用setrlimit()设置堆栈大小并引发堆栈溢出/段错误

在下面的给出示例中,我尝试将stacksize设置为1kb.

为什么现在可以在堆栈中分配一个大小为8kbin 的int数组foo()

#include <stdio.h>
#include <sys/resource.h>

void foo(void);

int main() {
 struct rlimit lim = {1024, 1024};

 if (setrlimit(RLIMIT_STACK, &lim) == -1)
  return 1;

 foo();

 return 0;
}

void foo() {
 unsigned ints[2048];

 printf("foo: %u\n", ints[2047]=42);
}
Run Code Online (Sandbox Code Playgroud)

c linux stack segmentation-fault setrlimit

12
推荐指数
1
解决办法
9933
查看次数