"Hello00000"。1234567891011char*StringPadRight(char*string,intpadded_len,char" />

C中的字符串填充

您所在的位置:网站首页 printf填充字符 C中的字符串填充

C中的字符串填充

2024-07-17 07:25| 来源: 网络整理| 查看: 265

我写了这个函数,它应该做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