Tag: string

“%s”,字符串不在字符串后打印空格

在此代码段中: printf(“shell> “); fgets(input, MAX_INPUT_SIZE, stdin); //tokenize input string, put each token into an array char *space; space = strtok(input, ” “); tokens[0] = space; int i = 1; while (space != NULL) { space = strtok(NULL, ” “); tokens[i] = space; ++i; } //copy tokens after first one into string strcpy((char*)cmdargs, (“%s “,tokens[1])); for […]

Win32 / C:将行结尾转换为DOS / Windows格式

我在Windows API项目中具有以下C函数,该项目读取文件并基于行结尾(UNIX,MAC,DOS),它用Windows的右行结尾替换行结尾( \r\n ): // Standard C header needed for string functions #include // Defines for line-ending conversion function #define LESTATUS INT #define LE_NO_CHANGES_NEEDED (0) #define LE_CHANGES_SUCCEEDED (1) #define LE_CHANGES_FAILED (-1) /// /// If the line endings in a block of data loaded from a file contain UNIX (\n) or MAC (\r) line endings, this […]

为什么我在打印计数值之前得到一个新行?

这是我的代码。 这是我想要的输出: Occurrence of ‘l’ in Hello world = 3 但是,在hello world之后,我正在获得一条新线。 我怎么解决这个问题? #include #include int main (void){ char first_line[1000]; char second_line[2]; int i,n,j; int count=0,flag=0; fgets(first_line, 1000, stdin); fgets(second_line, 2, stdin); for(i=0; i<strlen(first_line); i++) { if(second_line[0]==first_line[i]) { flag=1; count++; } } if(flag==1) printf("Occurrence of '%c' in %s = %d",second_line[0],first_line,count); else printf("%c isn't present",second_line[0]); return […]

使用C中的printf自定义字符串对齐

我正在尝试从给定的数组中获取以下输出 Apples 200 Grapes 900 Bananas Out of stock Grapefruits 2 Blueberries 100 Orangess Coming soon Pears 10000 这是我到目前为止所得到的(感觉我过度了),然而,当填充列时我仍然遗漏了一些东西。 我对如何解决这个问题的任何建议持开放态度。 #include #include #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) char *fruits[][2] = { {“Apples”, “200”}, {“Grapes”, “900”}, {“Bananas”, “Out of stock”}, {“Grapefruits”, “2”}, {“Blueberries”, “100”}, {“Oranges”, “Coming soon”}, {“Pears”, “10000”}, }; int get_max (int j, int y) […]

无限缓冲区printf – 格式化直接放入流

我的理解是printf的大多数实现依赖于类似的东西 vsnprintf( _acBuffer[0], sizeof( _acBuffer[0] ), pcFormat, *ptArgList ); 实际处理格式,然后通过puts将它们输出到流。 是否有任何实现可以最小化_acBuffer [0]的大小,同时保持打印所有字符串的能力? 显然是这样的: printf(“%s”, pcReallyLongString); 会是个问题。 非常感谢您的想法!

用sscanf读取字符串的剩余部分

我正在尝试读取一个字符串,该字符串由一组数字后跟一个字符串组成,并包含一些其他基本文本。 换句话说,行的格式是这样的: Stuff 天真地,我试过: sscanf(str,”Stuff”,&i1,&i2,&i3,&i4,str2); 但经过一些研究,我发现%s应该在它到达空格字符时停止解析。 我发现了这个问题 ,但没有一个答案解决了我遇到的问题:字符串中可能包含任何字符,包括换行符和正确的转义引号。 后者不是问题,如果我可以让sscanf将第一个引用后的所有内容放在我提供的预分配缓冲区中,我可以自行删除结束。 但是我该怎么做? 我不能使用%[]因为它需要一些东西来终止字符串,我唯一要终止它的是null终止符。 所以我想,“嘿,我只会使用空终结器!” 但%[\0]让编译器变得脾气暴躁: warning: no closing ‘]’ for ‘%[‘ format warning: embedded ‘\0’ in format warning: no closing ‘]’ for ‘%[‘ format warning: embedded ‘\0’ in format 使用像%*c这样的东西也不会起作用,因为我不确切知道需要采取多少个字符。 我尝试传递strlen(str)因为它会小于那个,但是sscanf返回4并且没有任何东西放入str2 ,这表明可能因为长度太长而放弃了并且没有打扰。 更新:我想我可以做类似的事情: sscanf(str,”Stuff<%d,%d,%d,%d,\"%n",&i1,&i2,&i3,&i4,&n); str2 = str+n;

有没有人知道atolf c函数?

我正在寻找一个类似于atol (char *到long int)但atofl (char到long double)的函数,有没有人知道这样做的库,或者一个简单的方法来执行此操作,因为在“0.00000005”上使用atof抛弃了5? 谢谢。

C将字符串转换为Ints问题

我正在尝试解析嵌入式系统上的一些输入。 我期待这样的事情: SET VARNAME=1,2,3,4,5,6,7,8,9,10\0 当我将单独的字符串转换为int时,如果字符串以8开头, atoi()和strtol()似乎都返回0。 这是我的代码: char *pch, *name, *vars; signed long value[256]; int i; #ifdef UARTDEBUG char convert[100]; #endif if(strncmp(inBuffer, “SET”,3)==0) { pch = strtok(inBuffer,” “); pch = strtok(NULL,” “); name = strtok(pch, “=”); vars = strtok(NULL,”=”); pch = strtok(vars,”,”); i = 0; while(pch != NULL) { value[i] = atoi(pch); #ifdef UARTDEBUG snprintf(convert, […]

从const char *参数中取出索引

我有以下代码: int some_array[256] = { … }; int do_stuff(const char* str) { int index = *str; return some_array[index]; } 显然上面的代码会导致某些平台出现错误,因为* str实际上可能是负面的。 所以我想到了两种可能的解决方案: 在赋值时转换值( unsigned int index = (unsigned char)*str; )。 传递const unsigned char*代替。 编辑:这个问题的其余部分没有得到治疗,所以我把它移动到一个新的线程。

‘\ 0’末尾的C字符串

在编写c代码时,我尝试编写自己的strcpy代码,我遇到了这个问题。 #include #include void strcpy2(char *s, char *t); int main() { char a[10] = “asds”; char b[10] = “1234567890”; strcpy2(a, b); printf(“Copy completed! : %s”, a); return 0; } void strcpy2(char *s, char *t) { while ((*s++ = *t++)); } 错误代码:已完成退出代码-1073741819(0xC0000005) 感谢这个问题 ,我学会了字符串应该以’\ 0’结尾,但为什么上面的代码不起作用,即使它在声明时不会导致错误? (当char b [10] =“123456789”时效果很好) 那么,’\ 0’究竟如何影响这个过程并最终导致错误? (运行时?编译时间等等)(我只知道’\ 0’应该是字符串的结尾)