这是我的代码
#include <stdio.h>
#include <string.h>
int proba(char a[][3], int y1, int x1){
char s[1000];
int br,broj;
br=0;
s[0]='\0';
printf("%d\n", x1);
while((y1!=3) && (x1!=3)){
s[br]=a[y1][x1];
printf("s= %s\n", s);
y1=y1+1;
x1=x1+1;
br++;
}
printf("%s\n", s);
s[0]='\0';
return broj;
}
int main(void) {
const char *needle;
int konacno,n,i;
konacno=0;
n=3;
char stack[3][3]={{'a','a','a'},{'b','b','b'},{'c','c','c'}};
konacno=konacno+proba(stack, 0,0);
konacno=konacno+proba(stack, 0,1);
printf("%d", konacno);
return 0;
}
在这段代码中,我有一个2d的字符数组
aaa
bbb
ccc
并且我的程序应该从这里创建每个可能的字符串(水平,垂直,对角线......),我已经为此编写了一个函数,但它不起作用,所以我把它简化为这里的代码,并且它仍然无法正常工作。问题是,在我得到的输出中
s= a
s= ab
s= abc
abc
s= abc
s= abc
abc
你可以看到,在程序的secund运行中,我的 s 字符串已经是 abc ,即使我已经用
清空字符串两次s[0]='\0';
我不知道我做错了什么,我已经在pascal中编写了确切的代码,它的工作原理就像我想要的那样,但这里没有......
答案 0 :(得分:0)
在C编程语言中,所有字符串最后都需要一个空终止符,指定为'\0'
。因此在循环中,在向字符串添加字符后,需要在打印字符串之前添加空终止符。代码应如下所示
while((y1!=3) && (x1!=3)){
s[br]=a[y1][x1];
br++;
s[br] = '\0';
printf("s= %s\n", s);
y1=y1+1;
x1=x1+1;
}