我有这个函数将一个字符数组(即一个字符串)变成一个直角三角形。它工作,但它甚至在阵列停止后继续运行。所以输出总是有很多额外的空白行。
如果单词足够长,随机符号将出现在该空格的末尾。这可能是因为空白区域退出了100的数组大小。 我不知道是什么造成的。我试图为计数器和printf设置一个新行,但这完全打破了代码。我认为这对于新线路来说绝对是printf,但是在尝试之后看起来并不像现在这样。 有谁看到什么错了?
以下是我的代码中的远程功能。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define clear system("cls")
#define pause system("pause")
void triangulate(char stringArray[]){
int i,j,len = 0;
int counter=0;
len=strlen(stringArray);//a function library function that returns the length
printf("\n");
for(i=1;i<=len;++i){
for(j=1;j<=i;++j){
printf("%c",stringArray[counter]);
counter++;
}
printf("\n");
}
printf("len:%i counter:%i",len, counter);
pause;
}//end triangulate()
答案 0 :(得分:1)
这是错误的:
for(i=1;i<=len;++i) {
for(j=1;j<=i;++j) {
printf("%c",stringArray[counter]);
counter++;
}
printf("\n");
}
你不能多次增加计数器。由于嵌套循环,counter
将访问越界位置 - 您将其递增到与字符串长度相关的最终值O(n ^ 2)。
答案 1 :(得分:0)
让我们考虑以下简单案例:
stringArray = "abc";
看看两个循环中会发生什么:
i = 1; j = 1; counter = 0;
i = 2; j = 1; counter = 1;
i = 2; j = 2; counter = 2;
i = 3; j = 1; counter = 3; // Undefined behaviour since stringArray[counter]
// is out of bounds
依此类推(但是,一旦你点击undefined behaviour,所有的赌注都会关闭,你的程序可以自由地做任何想做的事。)