C - for 循环中的 strcat

ale*_*xfi 1 c console-application strcat

我正在编写一个小 C 程序,想知道为什么我在控制台中的输出是“0”,“0”[...]?我期望的输出是“ab”,“ac”,[...]。

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

int main(int argc, char *argv[])
{

  int i;
  int j;

  char string[] = "abc";
  char output[8];
  int length = size(&string[0]);

  for(i=0; i<length; i++) {
       for(j=0; j<length; j++){

       char a = string[i];
       strcat(output, &a);
       char b = string[j];
       strcat(output, &b);
       printf("%c\n", output);

       }
  }


  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Wea*_*ane 5

错误#1。您尚未初始化output[],因此strcat()无法有效地找到nul要附加的终止符。

output[0] = 0;
Run Code Online (Sandbox Code Playgroud)

错误#2。 strcat()无论如何,这不是附加字符的正确方法。

错误#3。你的循环控制不正确。见下文。

错误#4。你的length大小就像指针一样char*

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    int i, j;
    char string[] = "abc";
    char output[8];
    int length = strlen (string);        // corrected

    for(i=0; i<length-1; i++) {          // amended loop
        for(j=i+1; j<length; j++) {      // amended loop
            output[0] = string [i];
            output[1] = string [j];
            output[2] = 0;               // string terminator
            printf("%s\n", output);      // uses string type not char
        }
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出:

ab
ac
bc
Run Code Online (Sandbox Code Playgroud)

  • @chux:也许我们应该称这个错误#0。毕竟我们是程序员。8v) (3认同)
  • 很好的问题列表+1,但错误#1 没有启用编译器警告(或没有使用它们)。 (2认同)