我正在尝试编写一个程序来指定数组的内容,以替换特殊字符(输入、制表符)它们在 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];
}
}
}
最佳答案
我能够找到的问题:
您正在测试
EOF
而不是'\0'
以找到字符串的结尾。您没有为
t
数组分配足够的空间。现在,它与s
数组的长度相同,但您需要更长的时间以容纳额外的转义字符。您正在将字符串(例如
"\\"
或"n"
)分配给中的
。请改用char
>转义'\\'
或'n'
。您在转义中对
s
和t
使用相同的索引,导致您在s
中跳过字符转义一个角色。您需要分别跟踪s
和t
的当前索引。您正在使用
for
循环来检查i
是否符合escape
中的EOF
。您应该使用while
循环来检查s[i]
与'\0'
。永远不要终止字符串
t
。
错误太多...正在中止...
关于从数组中复制字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20024980/