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 отображаются без проблем.

1 ответ

Решение

Это проблемная строка:

            t[i] = s[i];

тебе нужно:

            t[j] = s[i];
Другие вопросы по тегам