C 从数组中复制字符
我正试图编写一个程序来规定数组的内容,以替换ASCII码中的特殊字符(回车、制表符)。当不正确的声明数组s:C 从数组中复制字符,c,arrays,C,Arrays,我正试图编写一个程序来规定数组的内容,以替换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[
#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];
}
}
}
#包括
#包括
无效逃逸(char[],char[]);
int main()
{
int k,j;
k=j=0;
字符s[]=“klks\nsgs\t”;
而(s[k]!=EOF)
k++;
chart[k];
逃逸(s,t);
while(j!=EOF)
{
printf(“%d”,t[j]);
j++;
}
}
无效转义(字符s[],字符t[]
{
int i;
对于(i=0;i!=EOF;i++)
{
开关(s[i])
{
案例“\n”:
t[i]=“\\”;
i++;
t[i]=“n”;
打破
案例'\t':
t[i]=“\\”;
i++;
t[i]=“t”;
打破
违约:
t[i]=s[i];
}
}
}
在字符串上循环,直到完成NULL
而不是EOF
我真的不明白问题是什么,你能澄清一下吗?在字符串上循环直到完成,直到
NULL
而不是EOF
我真的不明白问题是什么,你能澄清一下吗?我能找到的问题:
EOF
而不是'\0'
,以查找字符串的结尾t
数组分配足够的空间。现在,它的长度与s
数组的长度相同,但需要更长的长度来容纳额外的转义字符“\\”
或“n”
)分配给转义
中的字符。改用'\'
或'n'
s
和t
使用相同的索引,导致在转义字符时跳过s
中的字符。您需要分别跟踪s
和t
的当前索引for
循环,该循环将i
与escape
中的EOF
进行检查。您应该使用一个while
循环来检查s[i]
与'\0'
t
错误太多。。。正在中止…我能够找到的问题:
EOF
而不是'\0'
,以查找字符串的结尾t
数组分配足够的空间。现在,它的长度与s
数组的长度相同,但需要更长的长度来容纳额外的转义字符“\\”
或“n”
)分配给转义
中的字符。改用'\'
或'n'
s
和t
使用相同的索引,导致在转义字符时跳过s
中的字符。您需要分别跟踪s
和t
的当前索引for
循环,该循环将i
与escape
中的EOF
进行检查。您应该使用一个while
循环来检查s[i]
与'\0'
t
错误太多。。。正在中止…我有点怀疑您是否会在以0结尾的字符串中找到EOF。我有点怀疑您是否会在以0结尾的字符串中找到EOF。是的。除非您的字符串由于某种奇怪的原因以(char)EOF结尾,否则您可能应该检查“\0”或仅检查0。此外,您没有终止字符串“t”。循环后需要一个t[i]='\0'。最后,我也不明白你问的问题。是的。除非您的字符串由于某种奇怪的原因以(char)EOF结尾,否则您可能应该检查“\0”或仅检查0。此外,您没有终止字符串“t”。循环后需要一个t[i]='\0'。最后,我也不明白你问的问题。@Kulis如果你转义字符串
“Hello\n”
,该字符串有六个字符,因为“\n”
只是一个字符。如果将'\n'
替换为'\'
和'n'
,这是两个字符。因此,转义字符串有七个字符,比原始字符串长。@Kulis如果转义字符串“Hello\n”
,则该字符串有六个字符,因为“\n”
只是一个字符。如果将'\n'
替换为'\'
和'n'
,这是两个字符。因此,转义字符串有七个字符,比原始字符串长。