如何在C语言中打印char数组,例如Java的“ Arrays.ToString(array)”?

时间:2019-04-03 14:05:42

标签: c arrays char

我想像Java的Arrays.ToString(array);一样在C中打印char数组。它会打印我想要的内容,但会在最后添加一些字符。我猜是因为有特殊字符\0

我声明了一个char数组char letters[] = {'g','y','u','c','n','e'};

并尝试打印:printf("\n [%s]:", letters);

输出为:[gyucneÇ_=]

这是Java代码:

    char[] letters= {'g','y','u','c','n','e'};
    System.out.print( Arrays.toString(letters) );

输出为:

[g, y, u, c, n, e]

我想获得Java代码的输出。我想知道是否也要包含逗号,是否必须一一打印字符,还是可以一次打印?

当然,我的首要任务是删除C代码末尾打印的特殊字符。

2 个答案:

答案 0 :(得分:1)

单独打印每个字母。您没有字符串。您无法从<string.h>printf()或其他期望 string 的其他函数中调用大多数函数。

char letters[] = {'g', 'y', 'u', 'c', 'n', 'e'}; // ATTENTION: letters is not a string!
for (int i = 0; i < sizeof letters; i++) {
    putchar(letters[i]);
}
putchar('\n'); // end with a newline

答案 1 :(得分:0)

  

我声明了一个char数组:char letters[] = {'g','y','u','c','n','e'};

但这不是C字符串(因为它不是 not NUL 终止的!)。您应该改为进行编码:

const char letters[] = {'g','y','u','c','n','e',(char)0};

(或使用'\0'代替(char)0  ....)或更好:

const char letters[] = "gyucne";

都和完全等效。

然后,您可以编写类似printf("letters are %s\n", letters);的代码,因为您的letters现在是C字符串。

NB。请另外阅读http://utf8everywhere.org/How to debug small programs-两者实际上都与您的情况相关。另请参见至少一些C reference网站。