Tag: 连接

`char * array `和`extern char ** array`连接错误?

首先,看看这个例子(我为了举例而做了这个,它不是一个真正的程序): whatever.h #ifndef WHATEVER_H #define WHATEVER_H void fill(void); #endif main.c中 #include #include “whatever.h” char *names[10] = {NULL}; int main() { int i; fill(); for (i = 0; i < 10; ++i) printf("%s\n", names[i]); return 0; } whatever.c #include “whatever.h” extern char **names; void fill(void) { int i; for (i = 0; i < 10; ++i) […]

在宏中连接字符串 – C ++

连接宏中定义的字符串的最简单方法是什么。 即我正在寻找的伪代码将是: #define ROOT_PATH “/home/david/” #define INPUT_FILE_A ROOT_PATH+”data/inputA.bin” #define INPUT_FILE_B ROOT_PATH+”data/inputB.bin” … #define INPUT_FILE_Z ROOT_PATH+”data/inputZ.bin” 我知道的唯一方法是在代码中使用strcat,或者使用字符串类然后使用c_str方法,但是当我有大量输入文件时它会变得混乱。 我想直接使用INPUT_FILE_A等,而不是有很多局部变量。 有没有一个很好的方法来做到这一点? 谢谢。

使用C预处理器为scanf构造字符串文字?

我正在尝试创建一个sscanf字符串文字,以帮助在C99中防止缓冲区溢出。 目标是这样的: #define MAX_ARG_LEN 16 char arg[MAX_ARG_LEN] = “”; if (sscanf(arg, “%”(MAX_ARG_LEN-1)”X”, &input) > 0) 显而易见的“手动”解决方案如下: #define MAX_ARG_LEN 16 #define MAX_ARG_CHARS “15” char arg[MAX_ARG_LEN] = “”; if (sscanf(arg, “%”MAX_ARG_CHARS”X”, &input) > 0) 但是,在缓冲区大小为16的情况下,我更喜欢自动生成“%15X”。此链接几乎适用于我的应用程序: 将预处理程序标记转换为字符串但不处理-1。 建议?

C:连接字符串的最佳和最快的方法是什么

我目前使用string.h库中的strcat()函数在c中连接字符串。 我想到了,我得出一个结论,它应该是非常昂贵的函数,因为它开始连接之前,它必须迭代char数组,直到它找到’\0’字符。 例如,如果我使用strcat()将字符串”horses” 1000次,我将需要支付(1 + 2 + 3 + … + 1000) * strlen(“horses”) = (1000*1001)/2 * 6 = 3003000 我想到了非标准的方法,维护一个字符串长度的整数,然后发送到strcat()指向字符串末尾的指针: strcat(dest + dest_len, “string”); 在这种情况下,我只需支付1000 * strlen(“horses”) = 1000 * 6 = 6000 。 6000远低于3003000 ,因此如果你进行大量此类连接,它对性能非常关键。 有没有更标准的方法来做到这一点,看起来比我的解决方案更好?

如何在C中连接两个数组?

如何连接两个数组以获得包含两个原始数组元素的单个数组?

以编程方式检查我的机器是否具有Internet访问权限

如何以编程方式检查我的机器是否具有使用C / C ++的Internet访问权限,是否仅仅是ping IP? NIC如何做到这一点? 我的意思是: 我使用的是Windows 7。

C:跨平台的RS-232串口库?

我正在寻找一个开源的跨平台库,用于处理C语言中的串行端口,这就是令人敬畏的PySerial库(不幸的是我必须在这个应用程序中使用C)。 我只发现了这个: http : //www.teuniz.net/RS-232/ ,而且似乎没有提到OS X的兼容性。

C预处理器#和##运算符

C99标准文档在与##预处理运算符相关的部分中有以下示例: 在以下片段中: #define hash_hash # ## # #define mkstr(a) # a #define in_between(a) mkstr(a) #define join(c, d) in_between(c hash_hash d) char p[] = join(x, y); // equivalent to // char p[] = “x ## y”; 扩张在不同阶段产生: join(x, y) in_between(x hash_hash y) in_between(x ## y) mkstr(x ## y) “x ## y” 换句话说,扩展hash_hash会产生一个新的令牌,由两个相邻的尖锐符号组成,但这个新令牌不是##运算符。 我不明白为什么hash_hash的替换产生##而不是“##”或“#”“#”。 在双哈希播放之前和之后单个哈希的角色是什么? 任何回复都非常感谢。

宏值的字符串化

我遇到了一个问题 – 我需要使用宏值作为字符串和整数。 #define RECORDS_PER_PAGE 10 /*… */ #define REQUEST_RECORDS \ “SELECT Fields FROM Table WHERE Conditions” \ ” OFFSET %d * ” #RECORDS_PER_PAGE \ ” LIMIT ” #RECORDS_PER_PAGE “;” char result_buffer[RECORDS_PER_PAGE][MAX_RECORD_LEN]; /* …and some more uses of RECORDS_PER_PAGE, elsewhere… */ 这失败了一条关于“stray#”的消息,即使它有效,我想我会得到字符串化的宏名称,而不是值。 当然,我可以将值提供给最终方法( “LIMIT %d “, page*RECORDS_PER_PAGE ),但它既不漂亮也不高效。 当我希望预处理器不以特殊方式处理字符串并且像普通代码一样处理它们的内容时,就像这样。 现在,我用#define RECORDS_PER_PAGE_TXT “10”表达它,但可以理解的是,我对它并不满意。 如何做到对了?