Tag: string

如何在c中找到两个字符串之间的文本

我需要在c中提取2个字符串模式之间的文本。 例: aaaaaaTEXT TO EXTRACTaaaaaaaaa PATTERN1= PATTERN2= 谢谢。

避免在printf的包装中发出警告

我正在编写的小C库中有一个错误报告function。 除了普通errorfunction之外,我还想提供一个errorf函数,以便轻松地在错误消息中嵌入信息。 /* * Prints a formatted error message. Use it as you would use ‘printf’. See the * ‘sio_error’ function. */ void sio_errorf(const char *format, …) { // Print the error prefix if (g_input == STDIN) fputs(“error: “, stderr); else fprintf(stderr, “%s: “, g_progname); // Pass on the varargs on to ‘vfprintf’. va_list arglist; […]

strlen是否为二进制和ascii数据返回相同的值

请找到以下代码段。 unsigned char bInput[20]; unsigned char cInput[20]; 从函数中,我在bInput获得二进制数据,并使用strlen(bInput)确定其长度。 我将bInput转换为二进制转换为ASCII并存储在cInput并打印其长度。 但两者都不同。 我是编程新手。 请指导其行为。

argv中的字符串是否可修改?

我刚刚写了一个小程序,用C语言读取命令行参数,没什么太难的。 我也在修改它们,例如将参数的第一个字符更改为大写。 我知道你不应该修改字符串文字,因为它可能导致未定义的行为,所以只是想知道*argv[]中的字符串是否是你不应该更改的文字。 int main(int argc, char *argv[])

从C中的文本文件中读取逗号分隔值

我是C编程的新手,这是作业的一部分。 我试图以以下格式读取逗号分隔的文本文件: [value1], [value2] 在C中并尝试将它们作为string和int参数传递给函数。 我已经尝试过使用sscanf()甚至使用fgetc()进行操作而没有太多帮助。 逗号之后的空格被certificate是一个问题。 例: 2001, 102 1314, 78 0410, 910 … 请帮帮我。 谢谢。

用于从字符串中提取数字/数字范围的复杂算法

我正在研究一种算法,我正在尝试以下输出: 给定值/输入: char *Var = “1-5,10,12,15-16,25-35,67,69,99-105”; int size = 29; 这里“1-5”表示范围值,即它将被理解为“1,2,3,4,5”,而仅具有“,”的值是单独的值。 我正在编写一种算法,其中结束输出应该是这样的,它将提供完整的输出范围: int list[]=1,2,3,4,5,10,12,15,16,25,26,27,28,29,30,31,32,33,34,35,67,69,99,100,101,102,103,104,105; 如果有人熟悉这个问题,那么帮助将非常感激。 提前致谢! 我的初始代码方法如下: if(NULL != strchr((char *)grp_range, ‘-‘)) { int_u8 delims[] = “-“; result = (int_u8 *)strtok((char *)grp_range, (char *)delims); if(NULL != result) { start_index = strtol((char*)result, (char **)&end_ptr, 10); result = (int_u8 *)strtok(NULL, (char *)delims); } while(NULL != result) { […]

比较字符串中的char与给定的char

我有以下内容: int findPar(char* str) { int counter=0; while (*str) { if(str[0] == “(“) <—- Warning { counter++; } else if (str[0]== ")") <—- Warning { counter–; } if (counter<0) { return 0; } str++; } if (counter!=0) { return 0; } return 1; } 我得到的警告是int和char之间的比较。 我尝试进行比较(字符串中的第一个char与给定的char)以及strcmp,如下所示: if (strcmp(str, “)”)==0) { stuff } 但即使比较(应该)是正确的,它也永远不会进入’东西’。 我该怎么办?

将std :: string转换为char * for C函数时需要注意什么?

我已经阅读了许多post,询问有关如何将C ++ std::string或const std::string&转换为char*以将其传递给C函数的问题,而且似乎有很多关于这样做的警告。 人们必须要注意字符串是连续的和许多其他的东西。 关键是我从来没有真正理解需要注意的所有要点以及为什么 ? 我想知道是否有人可以总结关于从std::string转换为传递给C函数所需的char*的警告和挫折? 这当std::string是一个const引用时,它只是一个非const引用,当C函数改变char*时它不会改变它。

什么是在C中转换字符串顺序的可移植方式

我正在尝试编写可与任何可以建立套接字连接的标准客户端进行通信的服务器(例如telnet客户端) 它最初是一个echo服务器,当然不需要担心网络字节排序。 我熟悉ntohs,ntohl,htons,htonl函数。 如果我转移16位或32位整数,或者如果发送的字符串中的字符是2或4字节的倍数,那么它们本身就会很好。 我想创建一个对字符串进行操作的函数,例如: str_ntoh(char* net_str, char* host_str, int len) { uint32_t* netp, hostp; netp = (uint32_t*)&net_str; for(i=0; i < len/4; i++){ hostp[i] = ntoh(netp[i]); } } 或类似的东西。 上面的假设是单词大小为32位。 我们不能确定发送机器上的字数不是16位还是64位正确? 对于客户端程序,例如telnet,他们必须在发送之前使用hton *,在接收数据之后使用ntoh *,对吗? 编辑:对于那些人而言,因为1-char是一个字节,字节序无关紧要: int main(void) { uint32_t a = 0x01020304; char* c = (char*)&a; printf(“%x %x %x %x\n”, c[0], c[1], c[2], c[3]); } […]

格式字符串漏洞

我有简单的C程序: char user_input[100]; scanf(“%s”, user_input); printf(user_input); 据我所知,这代表了安全漏洞; 例如,输入一堆%x将打印出堆栈的内容。 但是如何打印所选的内存位置呢? 我读到了: \x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s| 应该从本文的位置0x08480110转储内存的内容。 但相反,它将打印出下一个4字节到堆栈上的格式字符串。 我想知道为什么。