gpt4 book ai didi

c - K&R c 编程书籍第二版,练习 3-2,我写的一个微妙错误

转载 作者:行者123 更新时间:2023-12-02 18:52:08 25 4
gpt4 key购买 nike

当我写练习3-2,即转义字符和unescape字符时:我遇到了一个微妙的问题,我无法弄清楚:

#include <stdio.h>
void escape(char s[], char t[]);
void unescape(char s[], char t[]);
int main(){
char s[] = "we can run all the \n \t \n \t \t programs on it";
char t[100];
char m[100];
int n = 0;
escape(s, t);
printf("%s\n", s);
printf("%s\n", t);
unescape(t, m);
printf("%s\n", m);
}
void escape(char s[], char t[]){
int i, j;
for (i = j = 0; s[i] != '\0' ; i++){
switch(s[i]){
case '\n':
t[j++] = '\\';
t[j++] = 'n';
break;
case '\t':
t[j++] = '\\';
t[j++] = 't';
break;
default:
t[j++] = s[i];
break;
}
}
t[j] = '\0';
}
void unescape(char t[], char m[]){
int i, j;
for (i = j = 0; t[i] != '\0'; i++){
switch(t[i]){
case '\\':
switch(t[++i]){
case 'n':
m[j++] = '\n';
break;
case 't':
m[j++] = '\t';
break;
default:
break;
}
default:
m[j++] = t[i];
break;
}
}
m[j] = '\0';
}

好吧,我省略了所有评论,希望它足够简单易懂编译并运行,得到如下结果:

enter image description here

为什么最后当我转义到真实字符时我得到了多余的 n,n,t,t,同时制表符和换行符按预期工作?

最佳答案

unescape 函数在 case '\\': 中没有 break 语句,因此它将落入 default.

我认为这就是为什么你会得到所谓的“冗余 n,n,t,t”

将其更改为:

  switch(t[i]){
case '\\':
switch(t[++i]){
case 'n':
m[j++] = '\n';
break;
case 't':
m[j++] = '\t';
break;
default:
break;
}
break; // add this

你会得到另一个输出。

顺便说一句:使用正确的编译器标志,您的编译器会警告您这一点。

规则 1:永远不要忽略警告...

关于c - K&R c 编程书籍第二版,练习 3-2,我写的一个微妙错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66621936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com