用char指针创建表

时间:2017-09-30 22:24:14

标签: c pointers

我想用c指针在c中创建一个表,但是这个程序不起作用,我不知道问题出在哪里
我应该把' \ 0'在字符串的末尾?
这是我的代码:

void table(int n)
{
char *s,*first;
s = (char *)malloc((5*n+3)*sizeof(char));
first = s;
int i,j;
for(i=0;i<2*n+1;i++)
{
    for(j=0;j<3*n+1;j++)
    {
        if(i%2==0 && j%3==0)
        {
            *s = ' ';
            s++;
        }
        else if(i%2==0 && j%3!=0)
        {
            *s = '-';
            s++;
        }
        else if(i%2==1 && j%3==0)
        {
            *s = '|';
            s++;
        }
        else if(i%2==1 && j%3 != 0)
        {
            *s = ' ';
            s++;
        }


    }
    *s = '\n';
    s++;
}
*s = '\0';
printf("%s",first);
free(s);
}
像这样的表:

     -- --
    |  |  |
     -- --
    |  |  |
     -- --

修改 在程序中进行一些编辑后,它现在运行但在某些情况下程序崩溃和Windows停止程序运行。

1 个答案:

答案 0 :(得分:2)

迭代次数不正确。

我认为你的迭代次数超出预期。在迭代中放置一个计数器,你会看到。

查找

如果n = 3:

  • Malloc需要18个字符。
  • 首先for重复7次。
  • for迭代10次。
    • 总迭代次数不是7+10,而是7*10

你写的是空间,不是吗?

这是您正在寻找的malloc:

s = (char *)malloc(( (2*n+1) * (3*n+2) +1)*sizeof(char));
  • 2n + 1为广场的垂直空间。
  • 3n + 1表示水平空格+ 1表示\n
  • 上次\0 +1。

这是完整的代码:

#include<stdlib.h>
#include<stdio.h>

void table(int n);
int main(void){
    table(10);
    return 0;
}

void table(int n)
{
    char *s,*first;

    s = (char *)malloc(( (2*n+1) * (3*n+2) +1)*sizeof(char));

    if(!s){
        return;
    }

    first = s;
    int i,j;
    for(i=0;i<2*n+1;i++)
    {
        for(j=0;j<3*n+1;j++)
        {
            if(i%2==0 && j%3==0)
            {
                *s = ' ';
                s=s+1;
            }
            else if(i%2==0 && j%3!=0)
            {
                *s = '-';
                s=s+1;
            }
            else if(i%2==1 && j%3==0)
            {
                *s = '|';
                s=s+1;
            }
            else if(i%2==1 && j%3!= 0)
            {
                *s = ' ';
                s=s+1;
            }
        }
        *s = '\n';
        s++;
    }

    *s = '\0';
    printf("%s",first);
    free(first);
}