I wrote this function that's supposed to do StringPadRight("Hello", 10, "0") -> "Hello00000".

char *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 < padded_len - len; i++) {
        strcat(string, pad);
    }
    return string;
}

它有效,但有一些奇怪的副作用...其他一些变量会发生变化.我该怎么解决这个问题?

推荐答案

知道printf为您进行填充可能会有所帮助,使用"-10s"作为格式字符串将输入填充到一个10个字符长的字段中

printf("|%-10s|", "Hello");

将输出

|Hello     |

在本例中,-符号表示"左对齐",10表示"字段中的十个字符",s表示正在对齐字符串.

Printf样式格式有多种语言版本,并且在Web上有大量参考资料.下面是one of many pages个解释格式化标志的代码.和往常一样,WikiPedia's printf page也很有帮助(主要是给我们上了一堂关于printf传播范围有多广的历史课).

C++相关问答推荐

设计处理各种数据类型的方法和数据 struct

有效地计算由一组点构成的等边三角形和等腰三角形的数量

在C中使用强制转换将uint16_t转换为uint8_t [2]是否有效?

C/SDL程序,渲染不使用我的渲染器

空指针的运行时强制转换

这是一个合法的C Strdup函数吗?

如何在不使用其他数组或字符串的情况下交换字符串中的两个单词?

如何确保在C程序中将包含uft8字符的字符串正确写入MySQL?

处理来自浏览器的HTTP请求

正数之和是负数

GCC错误,共享内存未定义引用?

链表删除 node 错误

有没有一种方法可以用C创建保留限定符的函数?

如何在不读取整个字符串的情况下删除UTF8字符串的尾随空格以提高性能?

有没有办法减少C语言中线程的堆大小?

是否有单独的缓冲区用于读写库调用?

在C中,为什么这个带有递增整数的main函数从不因溢出而崩溃?

在哪里可以找到叮当返回码的含义?

为什么 int32_t 和 int16_t 在 printf 输出中具有相同的位数?

System V 消息队列由于某种原因定期重置