我正在研究K& R第二版,并在练习3-2中遇到了一个奇怪的问题。出于某种原因,只有\ n出现了它应该和原始字符串中的两个标签,一个显示为\而另一个完全丢失。我也在字符串中获得不同数量的垃圾,最新的输出字符串是“我是(微符号mu)。\ n”。更令人好奇的是,\ n和句点之间的空格比原始空格要多。我查找了解决方案(https://code.google.com/p/k-and-r-exercises/source/browse/3-2.c),它与我的工作非常相似。此外,我在main,'\'和't'中做了两个putchars,并且没有问题显示\ 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';
}
P.S。我为函数内部的新字符串中的每个字符做了一个putchar(因为它们被分配了)并且得到了更多的垃圾字符,尽管\ t显示没有问题。
答案 0 :(得分:3)
这是问题:
t[i] = s[i];
你需要:
t[j] = s[i];