Tag: c

从unsigned long int转换为signed int,反之亦然

我想将一个signed int传递给gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) 。 我传递的signed int大于或等于零。 该函数将返回一个介于0和n之间的数字,因此如果我传递一个正的signed int,它将返回一个在signed int范围内的数字。 然后我想将返回值存储在signed int中。 用明显的预期行为来做到这一点最简洁的方法是什么? 我在64位Linux机器上使用64位编译器。 更新抱歉,伙计们。 请忽略。 我的代码问题其实在其他地方。 我误解了gdb的输出。

gstreamer gst_element_seek在mpeg2ts上非常慢

这是我到目前为止在玩的时候想出来的: case GDK_Up: { gint64 pos_ns, dur_ns, seek_ns; GstFormat format; format = GST_FORMAT_TIME; gst_element_query_duration(pipeline,&format,&dur_ns); gst_element_query_position(pipeline,&format,&pos_ns); g_print (“Time: %” GST_TIME_FORMAT ” / %” GST_TIME_FORMAT “\n”, GST_TIME_ARGS (pos_ns), GST_TIME_ARGS (dur_ns)); seek_ns = pos_ns + 60*GST_SECOND; if (!gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_KEY_UNIT, GST_SEEK_TYPE_SET, seek_ns, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) { g_print (“Seek failed!\n”); } } break; 这是我的管道: pipeline = […]

如何从lex / yacc获取更多解析错误信息?

如何从lex / yacc获取更多解析错误信息? 目前在我正在使用的lex文件中: int yyerror(const char *msg) { fprintf(stderr, “Parse error: %s\n”, msg); return 0; } 但是当我运行我的程序时,yyerror会输出一条空白消息。 我尝试将yylineno和yytext添加到yyerror但这会导致编译错误。 我尝试将“%error-verbose”添加到yacc文件,并将“%option debug”添加到lex文件,但这些对消息没有任何影响。 我确实注意到yyparse输出一个括号:'{‘来自我试图解析的文件,我不知道这个的意义。 我正在使用win_flex和win_bison。

推荐的信号要赶上?

目前,我抓住SIGSEGV,给自己发一封电子邮件,然后abort(),这样我就可以得到一个核心文件并调试我的程序。 (如果我没有抓到,我将无法知道我的特定程序是否已被发现。我的程序是在与我自己的服务器不同的服务器上运行的。) 是否有任何其他信号我应该抓住调试或我应该知道的原因?

在堆上创建结构?

我已经被指示通过在堆上创建一个String结构来编写模型strdup,它包含源的副本。 我想我已成功编写了strdup,但我不确定我是否在堆上创建了一个Struct … typedef struct String { int length; int capacity; unsigned check; char ptr[0]; } String; char* modelstrdup(char* src){ int capacity =0, length=0, i = 0 ; char *string; while ( src[length] != ‘\0’){ length++; } capacity = length; string = malloc(sizeof(String) + capacity + 1); while ( i < length ){ string[i] = […]

压缩算法

我正在研究压缩算法,其中我们必须用C编写代码。程序获取一个文件并删除每个字符中最重要的位并将压缩文本存储在另一个文件中。 我写了一个名为compress的函数,如下所示。 我在释放out_buf的同时遇到了段错误。 任何帮助都将是一个巨大的乐趣。

在C中制作金字塔

我必须使用C,而不是C ++制作金字塔。 我要做的就是这个,我有一个字符串“这是一个字符串”(是的,空间假设在那里),我必须从两边“删除”一个字母,并打印出来。 像这样 “this is a string ” “his is a string” “is a strin” “sa stri” ” a str” 重复此过程,直到没有更多字符。 我的老师说要使用子串,C中有没有说过的东西 从位置打印(索引0到索引x) 从位置打印(索引1到索引x-1) 我知道我必须使用for循环。

播种随机数发生器

我不记得看到任何程序调用srand与srand(time(NULL))任何东西。 在什么情况下会用一些其他值来调用srand ?

无符号幅度和二进制补码

我已经编写了一个代码来计算给定二进制代码的无符号幅度和二进制补码,除了我没有得到我应该的值。 我不确定我的代码究竟出了什么问题。 我希望不要在我的代码中使用幂函数和乘法函数。 我在下面发布了我的代码,请让我知道为什么我得到的值不正确。 #include “stdio.h” #define MAX_BITS 32 #define ENTER ‘\n’ #define NUMBER_TWO 2 int main() { int unsignedMag; int twosComp; int negation[MAX_BITS]; int bitStore[MAX_BITS]; char enter; int count; //Input from the User printf(“Enter up to 32 bits (hit ‘enter’ to terminate early): “); //Reads the first bit as a character char bit = […]

逻辑运算符与按位运算符的关键点是什么?

鉴于此声明是一个逻辑操作 ((a > 5) && (b > 4)) 这句话是按位操作的 ((a > 5) & (b > 4)) 以上两个陈述并不等同。 因为(a > 5)是{0,1}的元素 那么,为什么我们需要logical operators & bitwise-operation ? 编辑 :感谢所有的反馈。 关于逻辑运算符的短路行为,我实际上不希望这种行为 – 我正在为GPU编写代码,其中分支会降低性能:短路导致两个分支而不是代码中的一个分支。 对于C中的数值比较,在不需要短路的情况下,似乎逻辑和按位具有相同的行为。 在我的例子中,按位运算比逻辑快。 我为没有将这些细节放在原始post中而道歉。