使用 sprintf 填充字符串,C
Filling in a String using sprintf, C
我正在尝试为一个三角形创建一组图案,我也将其打印到控制台。我通过创建一个二维字符数组来做到这一点
字符模式 [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 的字符串。在将行打印到控制台并将 sprintf 输出到数组 temp 的 for 循环结束时,我将 strcpy temp into patterns[i]。然后我回到循环的顶部,重新初始化 temp 以使其新鲜,然后再次循环直到我拥有所有行。除了某些原因,sprint 不会填写我的数组临时文件。这是函数的不正确使用,还是必须执行我的参数传递?
sprintf
总是写到字符串的开头。要追加,您可以维护一个指向字符串末尾的指针:
char *ptr = rowpatterns[i];
ptr += sprintf(ptr, "*");
您可能还会听到使用 strcat
的建议 - 避免使用该功能。构建字符串时,重复 strcat
非常慢,并且是字符串代码中性能问题的常见来源。
我正在尝试为一个三角形创建一组图案,我也将其打印到控制台。我通过创建一个二维字符数组来做到这一点 字符模式 [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 的字符串。在将行打印到控制台并将 sprintf 输出到数组 temp 的 for 循环结束时,我将 strcpy temp into patterns[i]。然后我回到循环的顶部,重新初始化 temp 以使其新鲜,然后再次循环直到我拥有所有行。除了某些原因,sprint 不会填写我的数组临时文件。这是函数的不正确使用,还是必须执行我的参数传递?
sprintf
总是写到字符串的开头。要追加,您可以维护一个指向字符串末尾的指针:
char *ptr = rowpatterns[i];
ptr += sprintf(ptr, "*");
您可能还会听到使用 strcat
的建议 - 避免使用该功能。构建字符串时,重复 strcat
非常慢,并且是字符串代码中性能问题的常见来源。