打印一个完美的正方形



我有一个任务,根据两个输入打印一个完美的正方形,其中一个应该是行,另一个应该是列。 例: 如果输入是(5,3),它应该打印出来

o---o
|   |
o---o

我有这段代码来完成这项工作,直到我的最后一个测试,即输入似乎是空的[]并且我收到错误SIGSEGV (信号 11)

代码是

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char *array;
size_t used;
size_t size;
} StringArray;
void initArray(StringArray *a, size_t initialSize) {
a->array = malloc(initialSize * sizeof(char));
a->used = 0;
a->size = initialSize;
}
void insertArray(StringArray *a, char element) {
if (a->used == a->size) {
a->size *= 2; // if reach limit duplicate size and alloc in the heap
a->array = realloc(a->array, a->size * sizeof(char));
}
a->array[a->used++] = element;
}
void clearArray(StringArray *a, size_t newSize) {
a->array = NULL;
a->used = 0;
a->array = realloc(a->array, newSize * sizeof(char));
a->size = newSize;
}
void freeArray(StringArray *a) {
free(a->array);
a->array = NULL;
a->used = a->size = 0;
}
void printLineX( int x,  StringArray line){
for (int i = 0; i < x; i++) {
if(i == 0  ||  i == x-1)insertArray(&line, 'o');
else insertArray(&line, '-');
}
printf("%sn", line.array);
//
}
void printLineY(int x,  StringArray line){
for (int i = 0; i < x; i++) {
if(( i == 0) || ( i == x-1))insertArray(&line, '|');
else insertArray(&line, ' ');
}
printf("%sn", line.array);
// freeArray(&line);
}
int main(int argc, char **argv) {
// remove 1 from each dimension to offset for first char
int x;
int y;
if(argc < 3) {
x = atoi(argv[1]);
y = 1;
}
else if (argc < 2){
x = 1;
y = 1;
}   
else{
x = atoi(argv[1]);
y = atoi(argv[2]);
}
if (x < 1) x = 0;
if (y < 1) y = 0;
StringArray line;
initArray(&line, x);

if(argc > 2)
for (int i = 0; i < y; i++) {
if(i == 0 || i == y -1) printLineX( x, line);
else printLineY( x, line);
clearArray(&line, x);
}
freeArray(&line);
return 0;
}
if(argc < 3) {
x = atoi(argv[1]);
y = 1;
}
else if (argc < 2){
x = 1;
y = 1;
}   

这部分是错误的。 当argc为 1 时,argc < 3为 true,因此即使此代码为空,此代码也可能访问argv[1]

它应该是:

if (argc < 2){
x = 1;
y = 1;
}
else if(argc < 3) {
x = atoi(argv[1]);
y = 1;
}

最新更新