C 从数组中复制字符

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[

我正试图编写一个程序来规定数组的内容,以替换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];
        }
    }
}
#包括
#包括
无效逃逸(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'
    ,这是两个字符。因此,转义字符串有七个字符,比原始字符串长。