问题标签 [ansi-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
58 浏览

c - 如何从非浏览器设备进行 HTTP POST?

我正在从非浏览器设备(POS,销售点)发出 http 发布请求,该请求是用 C 编程的。

完美地执行 http GET 请求,我收到了来自服务器的答案。我只是与主机连接,构建味精,例如:

正如我所说,我发送msjEnv, 以从服务器获取我需要的答案(JSON)。

现在,通过 http POST 请求,服务器以某种方式不会收到构建消息的正文,例如:

当我看到服务器的控制台(跟踪)时,我可以看到 POS 与服务器连接,但 msg ( disp=101010&usr=896464&pass=9514&app=WPOS) 的 BODY 全部为空。

我已经用 Postman 进行了测试(一个优秀的应用程序来自 chrome 应用程序商店来测试 API),我收到了正确的响应。

我想我需要在 POST 标头中添加一些额外的内容,因为作为非浏览器设备,我可能没有像浏览器那样自动配置通信。有什么想法吗?

0 投票
3 回答
674 浏览

c - corrupted double-linked list after use fclose();

I have got problem in my program. After I use function fclose() I got error:

"* Error in `./server': corrupted double-linked list: 0x000000000251a230 * Przerwane (zrzut pamięci)"

If i delete fclose() function everythink is OK. This is code of my fuction:

0 投票
1 回答
245 浏览

c - 为什么 Xcode 允许我在任何地方声明 C 变量?

我在 Xcode 中创建了一个基本的 C 项目,并稍微修改了 main.c 中的起始代码。我还进入了构建设置并告诉它使用 ANSI-C。这是我的代码:

显然,它没有多大作用,但我预计变量声明会产生编译器错误(因为旧版本的 C 需要在作用域的开头,在其他语句之前声明变量)。然而,Xcode 愉快地编译并运行它,既没有错误也没有警告。

我可能在某个地方犯了一个愚蠢的错误,但我试图理解为什么这段代码可以编译。我读过 C99 和 C11 允许您在任何地方声明变量,所以这会起作用,但我明确地将项目设置为使用 ANSI-C。这只是 Apple 的 LLVM 编译器的工作方式吗?还是我在其他地方错过了什么?

0 投票
2 回答
92 浏览

c - 函数可以从调用函数的范围内更改变量的值吗?

被调用函数可以更改调用函数范围内的变量值吗?

0 投票
2 回答
7786 浏览

c - 基于 Flex/Bison 的 C 语言词法分析器/解析器

是否有一个简单的 C 语言词法分析器/解析器或基于 Flex/Bison 的子集?

我找到了一些 C 的开源解析器(TCC、LCC、...),但它们都不是基于野牛的。

0 投票
1 回答
1018 浏览

android - sprintf() 在某些运行时处理 %s 扩展 ASCII (ISO 8859-1)?

我在我的 C 应用程序中使用 ISO 8859-1(拉丁扩展 ASCII 字符集)。当我strcpy/strcat字符串的部分在一起时,它工作正常。但是,当我sprintf("%s %s")在某些运行时(尤其是某些 Android 版本)上使用 , 时,当扩展的 ASCII 字符(特别是é,虽然我没有尝试过其他字符)被击中时,字符串将被截断。

我以为%s只是应该复制字节直到'\0'被击中。我怀疑strcpy/strcat有效,因为它确实做到了这一点,没有任何格式。这里可能发生了什么?

我应该注意,我不是在查看文本printf(),而是使用我自己的文本渲染引擎来处理 ISO-8859-1 就好了。

更新:为了澄清,我有一个 NDK 应用程序,它将字符串保存在 C 中,并将其传递给我的基于 OpenGL 的文本渲染引擎。如果我将完整的字符串作为 char* 文字传递,它会显示得很好。如果我 sprintf() 将这些部分放在一起,它会在 é 字符处被截断。例如:

这显示得很好。但是这个:

打印为:

0 投票
1 回答
476 浏览

c - C99 之前的 C 在 for 循环中没有初始声明的理由?

为什么原始 C 语言不支持 for 循环初始化中的初始声明?

显然,最初的创造者,然后是 C99 之前的标准化,并没有这样指定。但我似乎找不到任何理由来解释为什么做出这种设计选择。

我似乎找到的最接近答案的是这个答案,它解释了如何禁止混合声明和代码,以便在重要时允许编译器单次返回。乍一看,for 循环语句中的声明与混合代码的声明具有相同/相似的问题是有道理的。

但是,C99 之前的 C确实支持块开头的声明:

我个人没有看到编译器逻辑与此有何本质不同:

在我看来,如果编译器可以执行前者的单遍,它也可以执行后者。它可能要求一个for语句总是创建一个范围块(即使后面只有一个语句而不是一个语句{ ... }块),但我想不出这种语义破坏任何其他 C99 之前的 C 代码的方法(或者for 语句后跟一个块,在这种情况下它已经“作用域”,或者它后面跟着一个语句,在这种情况下,无论如何都不允许在该单个语句中使用新声明)。

那么,为什么最初省略了这个语法“功能”?我认为在不违反当时的性能目标的情况下支持是微不足道的,我错了吗?当时已知的语言解析器/编译器技术是否使它看起来更难?它只是因为极简设计/心态而被省略了吗,因为在功能上可以做同样的事情(阻塞 for 循环)?或者是否有明确的语言设计理由反对它(例如,Go 最初是如何排除异常的,因为设计者认为这会产生更好的语言)?

我看过的地方

  • 我已经尝试在这里和通过一般的 web-search-fu 找到答案,但没有运气:我想到的所有搜索词似乎都充斥着关于 C for loop 初始声明的困惑问题,“在 C99 模式之外使用” ” 错误消息等(除了搜索词“基本原理”,它引导我找到有用的信息,但没有具体回答这个问题)。
  • 我搜索了Dennis Ritchie 本人关于开发该语言的这篇文章,但没有发现任何内容。
  • 我搜索了我的 C 编程语言(第 2 版)的副本,首先阅读了实际的 for 循环解释部分,然后检查了索引中其他提到的“for”/“for 循环”。我已经阅读了其他几个我认为可能会提到它的地方,但一无所获。
0 投票
1 回答
187 浏览

compilation - 包括自定义头文件 (ANSI C)

我已经制作了一些头文件,并将它们放在与主程序相同的文件夹中,但是编译命令gcc -ansi -Wall *.c找不到这些文件。我是否必须包含头文件的完整目录路径,还是我做错了什么?

0 投票
1 回答
64 浏览

python - 如何在 ANSI C 中完成嵌套函数的模拟,我可以动态更新我的函数?请看完整的解释

我是这个社区的新手,我想问一个问题。我不是程序员/开发人员,但我使用编程来加速我的科学计算。过去我使用了很多 python,但现在因为我的新工作,我需要使用 C 编程语言。我是新手,这有点困难,但我很挣扎:D。我的主要问题是,如何完成从 python 到 C 的这种代码:

我用它来获得动态最终方程,我可以为很多不同的例子编写我的求解器。基本上我想在 C 中做同样的事情。因为 ansi C 不支持嵌套函数,所以我不能用 typdefs 得到它,或者只是不知道该怎么做。我已经搜索了很多答案,但我没有找到它。

提前致谢。PS对不起我的英语不好,如果是:D

编辑:我忘记在我尝试做同样事情的地方添加我的示例代码:D 但我收到错误,因为 ansi C 不支持嵌套函数

0 投票
2 回答
116 浏览

c - while(1) 之前的代码不运行

我有如下代码:

问题是:为什么第一条指令被跳过?它只运行循环,永远不会打印你好。我用 gcc 和 g++ 编译它,结果相同。