im'尝试编写一个程序来规定数组的内容,以替换ASCII代码中的特殊字符(输入,制表符)。当一个不正确的声明数组s:
时会出现问题#include <stdio.h>
#include <stdlib.h>
void escape(char [], char []);
int main()
{
int k,j;
k=j=0;
char s[]="klks\nsgs \t";
while(s[k]!=EOF)
k++;
char t[k];
escape(s, t);
while(j!=EOF)
{
printf("%d", t[j]);
j++;
}
}
void escape(char s[], char t[])
{
int i;
for(i=0;i!=EOF;i++)
{
switch(s[i])
{
case '\n':
t[i]="\\";
i++;
t[i]="n";
break;
case '\t':
t[i]="\\";
i++;
t[i]="t";
break;
default:
t[i]=s[i];
}
}
}
答案 0 :(得分:3)
我能找到的问题:
您正在测试EOF
而不是'\0'
来查找字符串的结尾。
您没有为t
数组分配足够的空间。现在,它与s
数组的长度相同,但您需要更长的时间来容纳其他转义字符。
您正在为"\\"
中的"n"
分配字符串(例如char
或escape
)。请改用'\\'
或'n'
。
您在转义中使用s
和t
的相同索引,导致您在转义字符时跳过s
中的字符。您需要单独跟踪s
和t
的当前索引。
您正在使用for
循环检查i
EOF
中的escape
。您应该使用while
循环来检查s[i]
'\0'
。
您永远不会终止字符串t
。
错误太多......正在中止......
答案 1 :(得分:1)
循环一个字符串,直到NULL
而不是EOF
。
我真的不明白这个问题是什么,请你澄清一下吗?