使用sprintf,C填写字符串

时间:2015-10-19 02:58:19

标签: c arrays printf

我试图为三角形创建一系列图案,我也会打印到控制台。我这样做是通过创建一个2d char数组来实现的 char模式[number_of_patterns] [pattern_lengths]。我将它传递给一个函数,该函数将数组模式与我想要制作的三角形的高度一起使用。

void printTriangle (int rows, char rowPatterns[][rows]) {

    int initialSpaces = rows - 1;
    int numberOfAsterisks = 1;
    int i;

    for (i = 0; i < rows; i++) {
        char temp[rows];
        int spaceCounter = 0;
        int asteriskCounter = 0;

        while (spaceCounter < initialSpaces) {
            printf(" ");
            sprintf(temp, " ");
            spaceCounter++;
        }
        while (asteriskCounter < numberOfAsterisks) {
            sprintf(temp, "*");
            printf("*");
            asteriskCounter++;
        }
        while (spaceCounter < initialSpaces) {
            spaceCounter = 0;
            sprintf(temp, " ");
            spaceCounter++;
        }


        strcpy(rowPatterns[i], temp);
        printf("\n");
        initialSpaces--;
        numberOfAsterisks+=2;
    }

}

对于我打印的三角形的每一行,我为该行创建一个名为temp的字符串。在for循环结束时,将行打印到控制台,sprintf将其打印到数组temp,我将temp压缩为模式[i]。然后我回到循环的顶部,重新初始化temp以使其变得新鲜,然后再循环直到我拥有所有行。除了某些原因,sprint不会填补我的数组临时值。这是错误的使用函数,还是必须通过参数传递?

1 个答案:

答案 0 :(得分:1)

sprintf总是写入字符串的开头。要追加,您可以维护指向字符串末尾的指针:

char *ptr = rowpatterns[i];

ptr += sprintf(ptr, "*");

您可能还会听到使用strcat的建议 - 避免使用该功能。构建字符串时,重复的strcat非常慢,并且是字符串代码中性能问题的常见来源。