Tag: 字符串

将double / float转换为字符串

我需要将浮点数转换为十进制(或其他基数)中的等效字符串。 首先需要以xE+0格式进行转换,其中x是浮点数。 我的想法是首先将浮点数截断为临时整数,然后将该整数转换为字符串,然后考虑小数部分,将其乘以10而小数部分不变为0 。 将小数部分转移到小数点的左侧后,再次将整数应用于字符串函数,并将小数部分转换为字符串。 有没有更好的方法,哪个比这更快? 这种方法会引起任何副作用吗? 要将浮点数转换为指数表示,我应该如上所述,然后调整功率吗? 或者直接对IEEE 754浮点表示进行位掩码,并将每个部分转换为字符串。 注意:不能使用其他function,因为我可以访问绝对没有库函数。 这段代码进入玩具内核。

在C中对字符串进行标记

我一直试图使用SPACE作为分隔符来标记字符串,但它不起作用。 有没有人建议为什么它不起作用? 编辑:使用以下方式标记: strtok(string, ” “); 代码如下 pch = strtok (str,” “); while (pch != NULL) { printf (“%s\n”,pch); pch = strtok (NULL, ” “); }

宏值的字符串化

我遇到了一个问题 – 我需要使用宏值作为字符串和整数。 #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”表达它,但可以理解的是,我对它并不满意。 如何做到对了?

使用等于运算符==在C中比较两个字符串的相等性

int main (int argc, **argv) { if (argv[1] == “-hello”) printf(“True\n”); else printf(“False\n”); } #。/ myProg -hello 假 为什么? 我意识到strcmp(argv[1], “-hello”) == 0返回true …但为什么我不能使用相等运算符来比较两个C字符串?

如何从c中的字符串中提取数字?

假设我有一个像ab234cid*(s349*(20kd的字符串ab234cid*(s349*(20kd ,我想提取所有数字ab234cid*(s349*(20kd ,我该怎么办?

使用指针修改字符串时发生分段错误?

上下文 我正在学习C,我正在尝试使用指针来反转字符串。 (我知道你可以使用一个数组;这更多的是学习指针。) 问题 尝试运行下面的代码时,我不断遇到分段错误。 GCC似乎不喜欢*end = *begin; 线。 这是为什么? 特别是因为我的代码几乎与另一个问题中讨论的非邪恶C函数相同 #include #include void my_strrev(char* begin){ char temp; char* end; end = begin + strlen(begin) – 1; while(end>begin){ temp = *end; *end = *begin; *begin = temp; end–; begin++; } } main(){ char *string = “foobar”; my_strrev(string); printf(“%s”, string); }

从字符串中获取IPv4地址的最快方法

我有以下代码,比inet_addr快约7倍。 我想知道是否有办法改进这个以使其更快或者如果存在更快的替代方案。 这段代码要求提供一个有效的空终止IPv4地址,没有空格,在我的情况下总是这样,所以我针对这种情况进行了优化。 通常你会有更多的错误检查,但如果有办法使更快或更快的替代存在,我会非常感激。 UINT32 GetIP(const char *p) { UINT32 dwIP=0,dwIP_Part=0; while(true) { if(p[0] == 0) { dwIP = (dwIP << 8) | dwIP_Part; break; } if(p[0]=='.') { dwIP = (dwIP << 8) | dwIP_Part; dwIP_Part = 0; p++; } dwIP_Part = (dwIP_Part*10)+(p[0]-'0'); p++; } return dwIP; }

从函数返回char / string

我在C中编码相当新,目前我正在尝试创建一个返回ac string / char数组并分配给变量的函数。 到目前为止,我已经观察到返回char *是最常见的解决方案。 所以我试过: char* createStr() { char char1= ‘m’; char char2= ‘y’; char str[3]; str[0] = char1; str[1] = char2; str[2] = ‘\0’; char* cp = str; return cp; } 我的问题是如何使用这个返回的char*并将它指向的char数组赋值给char []变量? 我尝试过(都导致了noob-drowning错误): char* charP = createStr(); char myStr[3] = &createStr(); char* charP = *createStr();

为什么scanf不需要字符串的&符号,也适用于printf(在C中)?

我现在正在学习C中的字符串。 如何使用scanf获取你可以做的字符串 scanf(“%s”,str1); 而对于printf你可以做到 printf(“The string is %s\n”, str1); 我理解,对于scanf来说,这是因为字符串只是一个字符数组,它是一个指针,但是对于printf,你怎么能像输入int或float一样放置变量名?

strrev()函数在Linux中不可用吗?

我尝试使用strrev()编写代码。 我包含了但我仍然得到一个“对strrev未定义引用”错误。 我发现strrev()根本没有手册页。 为什么? Linux不支持strrev()吗?