gpt4 book ai didi

c - 使用 sprintf、C 填充字符串

转载 作者:行者123 更新时间:2023-11-30 15:16:10 25 4
gpt4 key购买 nike

我正在尝试为三角形创建一组图案,并将其打印到控制台。我通过创建一个二维字符数组来做到这一点,其中字符模式[模式数][模式长度]。我将其传递给一个函数,该函数采用数组模式以及我试图制作的三角形的高度。

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 的字符串。在将行打印到控制台并通过 sprintf 将其打印到数组 temp 的 for 循环结束时,我将 strcpy temp 转换为patterns[i]。然后我回到循环的顶部,重新初始化 temp 以使其保持新鲜状态,然后再次循环,直到获得所有行。除了由于某种原因,冲刺不会填充我的数组温度。这是函数的错误使用,还是必须与我的参数传递有关?

最佳答案

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

char *ptr = rowpatterns[i];

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

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

关于c - 使用 sprintf、C 填充字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33205943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com