我想用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停止程序运行。
答案 0 :(得分:2)
迭代次数不正确。
我认为你的迭代次数超出预期。在迭代中放置一个计数器,你会看到。
查找
如果n = 3:
for
重复7次。for
迭代10次。
7+10
,而是7*10
你写的是空间,不是吗?
这是您正在寻找的malloc:
s = (char *)malloc(( (2*n+1) * (3*n+2) +1)*sizeof(char));
\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);
}