相关疑难解决方法(0)

为什么不使用C作为您的网络应用程序?

今天早上,当我遇到G-WAN时,我正在看几个不同的网络服务器.据我所知,它是一个用C语言编写的Web服务器,您必须通过在C中编写您的网站/ Web应用程序来利用它.一个明显的好处是G-WAN网站建议的速度.

然而,在论坛上,G-WAN的创建者问为什么不将C用于基于网络的应用程序,除了难以理解之外我无法想到一个单一的原因(对我来说,无论如何,我是C的新手).除了很容易用这些语言开发之外,我们都必须有更多的理由来使用PHP,Python,Ruby等.我不认为这是一个很好的理由.

所以我把它告诉你:为什么你不使用C作为你的网络应用程序?

php c web-applications

98
推荐指数
11
解决办法
4万
查看次数

具体来说,铸造malloc的结果有什么危险?

现在在人们开始将它标记为dup之前,我已经阅读了以下所有内容,其中没有一个提供我正在寻找的答案:

  1. C FAQ:转换malloc的返回值有什么问题?
  2. SO:我应该显式地转换malloc()的返回值吗?
  3. SO:在C中不必要的指针转换
  4. SO:我是否施放了malloc的结果?

C FAQ和上述问题的许多答案都引用了一个神秘的错误,即铸造malloc的返回值可以隐藏; 但是,它们都没有在实践中给出这种错误的具体例子.现在要注意我说的错误,而不是警告.

现在给出以下代码:

#include <string.h>
#include <stdio.h>
// #include <stdlib.h>

int main(int argc, char** argv) {

    char * p = /*(char*)*/malloc(10);
    strcpy(p, "hello");
    printf("%s\n", p);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用gcc 4.2编译上面的代码,有和没有强制转换都会给出相同的警告,并且程序正确执行并在两种情况下都提供相同的结果.

anon@anon:~/$ gcc -Wextra nostdlib_malloc.c -o nostdlib_malloc
nostdlib_malloc.c: In function ‘main’:
nostdlib_malloc.c:7: warning: incompatible implicit declaration of built-in function ‘malloc’
anon@anon:~/$ ./nostdlib_malloc 
hello
Run Code Online (Sandbox Code Playgroud)

那么,任何人都可以提供一个特定的代码示例,说明由于转换malloc返回值而可能发生的编译或运行时错误,或者这仅仅是一个城市传奇?

编辑我在这个问题上遇到了两个写得很好的论点:

  1. 利于强制转换:CERT建议:立即将内存分配函数调用的结果转换为指向已分配类型的指针
  2. 反对强制转换 (截至2012-02-14的404错误:使用2010-01-27中的互联网归档Wayback Machine副本.{2016-03-18:"由于robots.txt而无法抓取或显示页面."})

c

85
推荐指数
5
解决办法
2万
查看次数

宏扩展错误

我一直试图理解宏扩展,发现第二个printf发出错误.我期待第二个print语句生成与第一个相同的输出.我知道有字符串连接的功能.我发现很难理解为什么第一个print语句有效而第二个没有.

#define CAT(str1, str2) str1 str2

void main()
{
    char *string_1 = "s1", *string_2 = "s2";
    printf(CAT("s1", "s2"));
    printf(CAT(string_1, string_2));
}
Run Code Online (Sandbox Code Playgroud)

c c-preprocessor

4
推荐指数
1
解决办法
262
查看次数

标签 统计

c ×3

c-preprocessor ×1

php ×1

web-applications ×1