首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >K&R练习3-2垃圾字符

K&R练习3-2垃圾字符
EN

Stack Overflow用户
提问于 2014-06-23 17:08:24
回答 1查看 300关注 0票数 0

我正在研究K&R第二版,在练习3-2中遇到了一个奇怪的问题。由于某些原因,只有\n出现的方式和我原来字符串中的两个选项卡一样,一个显示为\,而另一个则完全丢失。我还会在字符串中得到不同数量的垃圾,最新的输出字符串是"I \ am (微符号mu) . \n“。更奇怪的是,\n和句号之间还有比原来多几个空格。我查找了解决方案(https://code.google.com/p/k-and-r-exercises/source/browse/3-2.c),它与我所做的非常相似。此外,我做了两个主要的输入法,'\‘和't',并使\t显示没有问题。我很难理解是什么导致了这一错误,我可能真的需要你的建议。

代码语言:javascript
复制
#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';
}

我对函数中新字符串中的每个字符做了一个putchar (当它们被分配时),并且得到了更多的垃圾字符,尽管\t的出现没有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-23 17:15:17

这就是问题所在:

代码语言:javascript
复制
            t[i] = s[i];

你需要:

代码语言:javascript
复制
            t[j] = s[i];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24371506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档