标签: c

为什么我必须在指针上使用free而不是正常的声明?

为什么我在声明指针时必须使用free():

int *temp = (int*)malloc(sizeof(int))
*temp = 3;
Run Code Online (Sandbox Code Playgroud)

但不是我这样做的时候:

int temp = 3;
Run Code Online (Sandbox Code Playgroud)

c free pointers

12
推荐指数
4
解决办法
4713
查看次数

请帮我理解SQL vs C之类的编程?

具体来说,我试图了解SQL语句与普通C风格编程的区别,我似乎无法理解如何做"像这个表中的每个用户ID都有另一列数据等等的东西,运行这个存储程序"在编程中将是一个for循环,你怎么做这样的东西?

或者,对于tableA中contentID为11的每一行,向包含此数据的tableB添加一个新行,并从tableA的行中找到包含contentID为11的userID ...

任何人都在想与编程相比如何理解SQL语句?如果我明白自己的想法,我觉得我可以更好地运用它......

c sql

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

C/C++的选项解析器?

可能重复:
C++有哪些参数解析器库?

我已经做了一些寻找,并且有很多用于命令行选项解析的库,但很难区分它们.有没有人有任何经验?是否比其他任何人更难/更好/更快/更容易/更好?或者我应该自己成长?

c c++ command-line parsing option

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

学习嵌入式C/C++开发的最佳评估套件是什么?

我正在尝试改进我在ARM体系结构上的嵌入式C/C++开发.我最近从68K开发转向ARM,并希望利用我的业余时间深入挖掘平台并学习最佳实践,特别是在开发移动平台方面.

优选地,32位架构将有助于支持开发工具.学习过程中的一些乐趣可以增强我对平台的理解

c c++ embedded arm

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

为什么这个显式演员的结果与隐式演员的结果不同?

为什么这个显式演员的结果与隐式演员的结果不同?

#include <stdio.h>

double  a;
double  b;
double  c;

long    d;

double    e;

int main() {
    a = 1.0;
    b = 2.0;
    c = .1;

    d = (b - a + c) / c;
    printf("%li\n", d);        //    10

    e = (b - a + c) / c;
    d = (long) e;
    printf("%li\n", d);        //    11
    }
Run Code Online (Sandbox Code Playgroud)

如果我做d =(长)((b - a + c)/ c); 我也得到10.为什么双重赋值有所不同?

c casting type-conversion

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

C中的空结构

我有一个没有成员的结构(目前),我想知道是否有可能抑制我得到的警告:

warning: struct has no members
Run Code Online (Sandbox Code Playgroud)

是否可以添加成员并保持sizeof结构为零?还有其他方法吗?

c struct warnings

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

什么是"提示"对套接字编程中的addrinfo名称意味着什么

在进行套接字编程时,人们总是将addrinfo结构命名为:

struct addrinfo hints;
// get ready to connect
status = getaddrinfo("www.example.net", "3490", &hints, &servinfo);
Run Code Online (Sandbox Code Playgroud)

我想知道它对于更好地理解是什么意思.

提前致谢.


谢谢你的回答.也许我没有让我清楚.

但我想知道变量名称"hints"是否是某些单词的缩写?或者它只是单词"提示"意味着它只提供一些地址信息并让getaddrinfo()函数填写其余的?

c sockets

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

C语言中的指针算法

请考虑以下代码片段:

int (*p)[3];
int (*q)[3];

q = p;
q++;
printf("%d, %d\n", q, p);
printf("%d\n", q-p);
Run Code Online (Sandbox Code Playgroud)

我知道指针算法是智能的,这意味着操作q++前进q足够的字节指向下一个3整数数组,所以第一次打印是' 12, 0' 并不意味着递增q使它在12中更大.

但第二次印刷确实令我惊讶.它打印1!
那么为什么它会打印1而不是12?它只是困惑我.

c pointers pointer-arithmetic

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

sched_setaffinity()如何工作?

我试图了解linux系统调用sched_setaffinity()的工作原理.这是我在这里提出的问题的后续内容.

我有这个指南,它解释了如何使用系统调用,并有一个非常整洁(工作!)的例子.

所以我下载了Linux 2.6.27.19 内核源代码.

我对包含该系统调用的行进行了'grep',得到了91个结果.没有前途.

最后,我试图了解内核如何为特定内核(或处理器)设置指令指针.

我熟悉单核单线程程序的工作原理.有人可能发出'jmp foo'指令,这基本上将IP设置为'foo'标签的内存地址.但是当一个有多个内核时,必须说"在内存地址foo处获取下一条指令,并设置内核编号2的指令指针以便在那里开始执行."

在汇编代码中,我们指定哪个核心执行该操作?

回到内核代码:这里重要的是什么?文件'kernel/sched.c'有一个名为sched_setaffinity()的函数,但返回类型为"long" - 这与其手册页不一致.那么重要的是什么?这些模块中的哪一个显示了组装说明?什么模块正在读取'task_struct',查看'cpus_allowed'成员,然后将其转换为指令?(我还翻阅了glibc源代码 - 但我认为它只是调用内核代码来完成这项任务.)

c linux kernel multicore system-calls

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

与Linux的"cat"相比,为什么我的"cat"函数与系统调用相比较慢?

我在C语言中使用系统调用(打开,读取和写入)来完成此功能,以模拟Linux系统中的"cat"功能,并且它比实际的慢...

我使用与真正的"猫"相同的缓冲区大小并使用"strace"我认为它正在进行相同数量的系统调用.但是我的"猫"的输出比真正的"猫"慢了一点.

这是我的代码:

#define BUFSIZ 32768

int sysWriteBuffer(int fdout, char *buffer, ssize_t readBytes) {
    ssize_t writtenBytes = 0;

    while(writtenBytes < readBytes) {
        writtenBytes += write(fdout,
            buffer + writtenBytes, readBytes - writtenBytes);
        if(writtenBytes == -1) {
            return -1;
        }
    }

    return 0;
}

int catPrint(int fdin, int fdout) {
    char buffer[BUFSIZ];
    ssize_t readBytes;

    do {
        readBytes = read(fdin, buffer, BUFSIZ);

        if(readBytes == -1) {
            return -1;
        }

        if(sysWriteBuffer(fdout, buffer, readBytes) == -1) {
            return -1;
        }
    } while(readBytes > 0);

    return …
Run Code Online (Sandbox Code Playgroud)

c linux system-calls cat

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