如何在C中打印一个由char重复可变次数的字符串组成的字符串?

时间:2013-10-25 17:34:45

标签: c printing char

在Python中,可以使用XXXX打印print "X"*4; C中是否有任何简单的等效内容?

4 个答案:

答案 0 :(得分:2)

C对内置/标准库没有太大影响,所以你必须经历分配新缓冲区并将四个字符串连接到它的过程,然后释放缓冲区,打印更简单“X”四次。

int i;
for (i=0; i<4; ++i) {
   printf("X");
}
printf("\n");

你可以写自己的。

char* x(const char* s, unsigned int reps) {
   size_t len = strlen(s);
   char*  buf = (char*)malloc(len*reps + 1);

   while (reps--) {
      memcpy(buf, s, len);
      buf += len;
   }

   *buf = '\0';
   return buf;
}


char* repeated = x("X", 4);
printf("%s\n", repeated);
free(repeated);

但正如你所看到的,结果几乎一样长。

答案 1 :(得分:1)

是。欢迎来到C:

int i;
for (i=0; i<4; i++)
    printf("X");

答案 2 :(得分:0)

不是真的。在C中,您需要使用循环。

答案 3 :(得分:0)

C中没有标准库可以做到这一点,但您可以随时轻松实现。 C中的一个简单实现:

char * strmul(const char * src, size_t times) {
    size_t s_len = strlen(src);
    char * res = (char*)malloc(s_len * times + 1);
    int i;
    for(i = 0; i < times; i++) {
       strcpy(res + s_len * i, src);
    }
    return res;
}

@ikegami

建议的改进版本
char * strmul(const char * src, size_t times) {
    size_t s_len = strlen(src);
    char * res = (char*)malloc(s_len * times + 1);
    int i;
    for(i = 0; i < times; i++) {
       memcpy(res + s_len * i, src);
    }
    res[s_len * times + 1] = '\0';
    return res;
}