"Hello00000"。1234567891011char*StringPadRight(char*string,intpadded_len,char" />
C中的字符串填充 |
您所在的位置:网站首页 › printf填充字符 › C中的字符串填充 |
我写了这个函数,它应该做StringPadRight("Hello",10,"0") - >"Hello00000"。 1234567891011char *StringPadRight(char *string, int padded_len, char *pad) { int len = (int) strlen(string); if (len >= padded_len) { return string; } int i; for (i = 0; i %d ",str1,strlen(str1)); return 0; } 相关讨论 不要忘记释放str1哦,好吧,有道理。所以我这样做了: 1234 char foo[10] ="hello"; char padded[16]; strcpy(padded, foo); printf("%s", StringPadRight(padded, 15,""));谢谢! 您必须确保输入字符串有足够的空间来容纳所有填充字符。试试这个: 12char hello[11] ="Hello"; StringPadRight(hello, 10,"0");请注意,我为hello字符串分配了11个字节,以便在结尾处考虑空终止符。 您传递"Hello"的参数位于常量数据区域。除非你为char * string分配了足够的内存,否则它会超出其他变量。 1234char buffer[1024]; memset(buffer, 0, sizeof(buffer)); strncpy(buffer,"Hello", sizeof(buffer)); StringPadRight(buffer, 10,"0");编辑:从堆栈更正到常量数据区域。 相关讨论 你还在传递一个字符串文字......:P 我也注意到了。滑稽。 你复制太多了。 Hello是char [6]类型,但您尝试从中复制1024个字节。那只会失败。将其更改为读取sizeof"Hello"而不是第二个sizeof(缓冲区) strncpy(buffer,"Hello",sizeof(buffer));已经用' 0'填充整个缓冲区,因此你的memset()是多余的。 @litb,strncpy:如果在复制num个字符之前找到源C字符串的结尾(由空字符表示),则用零填充目标,直到向其写入总共num个字符。 @Chris,缓冲后的memset是一个习惯性的东西。我会留在那里。 1234567891011121314151617#include #include void padLeft(int length, char pad, char* inStr,char* outStr) { int minLength = length * sizeof(char); if (minLength |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |