我正在尝试用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]);
当我将此行激活时,我会看到:
我不明白为什么[]和'字符包含在string2中,我只是期望在输出中看到“plac”..奇怪的是,我从用户那里获取后立即打印string2数组(在gets(string2);
行下),我看到它就是“放置”。
中间发生了什么,我的错误在哪里?
答案 0 :(得分:0)
在您的打印声明中,printf("%s",string2[j]);
使用%c 而非%s ,
因为%s 总是尝试将打印项目转换为字符串。为此,您的编译器在其末尾添加了一个空字符。
那么现在实际发生了什么,
当 j == 0 时, string2 [j] 等于'p'作为单个字符,但作为字符串,它变为“p \” 0“其中\ 0是空字符,表示字符串的结尾
因此,我认为,使用%c (字符)打印为单个字符可以解决问题。