为什么我在C中填充char数组时会得到额外的字符?

时间:2016-11-17 04:37:03

标签: c arrays

我正在尝试用C编写一个应用程序而且我遇到了一个问题:我在下面的代码部分的string2数组中有一些不需要的字符:

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

#define max_len 100

int main() {
    char string1[max_len], string2[max_len], string3[max_len], temp[max_len];
    int m, n, i, j, k, min_str_len;
    puts("Enter your first word: ");
    gets(string1);
    puts("Enter your second word: ");
    gets(string2);
    m = strlen(string1);
    n = strlen(string2);
    min_str_len = ((m < n) ? m : n);

for (i = 0; i <= m; i++) {
    for (j = 0; j <= n; j++) {
        for (k = 0; k <= min_str_len; k++) {
            if (string1[i] == string2[j]) {
               //printf("%s",string2[j]);
               temp[k] = string2[j];
               break;
            }
             ...
         }
    }
}

所以你在这里看到我的代码的一部分。我将“placozoa”指定为string1,将“placement”指定为string2。请参阅以下行://printf("%s",string2[j]);当我将此行激活时,我会看到:

enter image description here

我不明白为什么[]和'字符包含在string2中,我只是期望在输出中看到“plac”..奇怪的是,我从用户那里获取后立即打印string2数组(在gets(string2);行下),我看到它就是“放置”。

中间发生了什么,我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

在您的打印声明中,printf("%s",string2[j]);使用%c 而非%s
因为%s 总是尝试将打印项目转换为字符串。为此,您的编译器在其末尾添加了一个空字符。
那么现在实际发生了什么, 当 j == 0 时, string2 [j] 等于'p'作为单个字符,但作为字符串,它变为“p \” 0“其中\ 0是空字符,表示字符串的结尾 因此,我认为,使用%c (字符)打印为单个字符可以解决问题。