为什么我的功能在C中无法正常工作?

时间:2014-04-17 09:24:28

标签: c string function

这是我的代码

#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中编写了确切的代码,它的工作原理就像我想要的那样,但这里没有......

1 个答案:

答案 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;
}