K&R Упражнение 3-2 мусорных персонажей
Я работаю в K&R 2nd Edition и столкнулся с любопытной проблемой с упражнением 3-2. По какой-то причине отображается только \n, как и должно быть, и из двух вкладок в моей исходной строке одна отображается как \, а другая полностью отсутствует. Я также получаю различное количество мусора в строке, самой последней выходной строкой является "I \ am (микросимвол mu) . \ N". Еще более любопытно, что между \n и точкой есть еще несколько пробелов, чем в оригинале. Я искал решение ( https://code.google.com/p/k-and-r-exercises/source/browse/3-2.c), и оно довольно похоже на то, что я сделал. Кроме того, я сделал два путчара в main, '\' и 't', и получил \t для отображения без проблем. Я довольно озадачен тем, что вызывает эту ошибку, и мог бы действительно воспользоваться вашим советом.
#include<stdio.h>
#include<string.h>
void switchFunction(char s[], char t[]);
main(){
char originalString[] = "I \t am \t . \n \0";
char copiedString[1000];
char a, b;
switchFunction(originalString, copiedString);
printf(originalString);
printf("\n");
printf(copiedString);
printf("\n");
a = '\\';
b = 't';
putchar(a);
putchar(b);
}
void switchFunction(char s[], char t[]){
int i;
int j = 0;
int originalStringLen;
originalStringLen = strlen(s);
printf("Original is %d characters.\n", originalStringLen);
for(i = 0; i < originalStringLen; ++i){
switch(s[i]){
case '\n':
t[j] = '\\';
j++;
t[j] = 'n';
j++;
break;
case '\t':
t[j] = '\\';
j++;
t[j] = 't';
j++;
break;
default:
t[i] = s[i];
j++;
}
}
t[j] = '\0';
}
PS Я сделал путчар для каждого символа в новой строке внутри функции (по мере их назначения) и получил значительно больше мусорных символов, хотя \t отображаются без проблем.