如何从数组中获取每个字符并将其放置到另一个字符中?

时间:2018-11-03 11:31:45

标签: c

我正在使用 c 编写程序,并且有两个变量:file[]tok[]。这个想法是逐个字符地遍历file[]并将字符放在tok[]中。我可以直接从file[]打印字符,但是不能将它们放入tok[]。我将如何抓住file[]每个字符并将其一个字符放入tok[]

我的main()方法(始终返回0,没有任何错误):

int main()
{
    char file[] = "PRINT \"Hello, world!\"";
    int filelen = strlen(file);
    int i = 0;
    char tok[] = "";

    for (i = 0; i < filelen; i++) {
        printf("%c \n", file[i]); // Print every char from variable file
        tok[strlen(tok)+1] = file[i]; // Add the character to variable tok

        printf("%s \n", tok); // Print tok

    }
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您犯了一些错误:

    char tok[] = "";

这会分配一个固定长度的 one 数组!添加字符时,内存不会自动扩展。要复制filelen个字符,您应该执行以下操作:

    char tok[filelen+1];   // note the "+1" for the terminating null character

在循环中,您反复呼叫strlen。我个人认为这会浪费CPU周期,因此更喜欢使用另一个索引变量,例如:

    int toklen= 0;   // initially empty
    ...
        tok[toklen++] = file[i]; // Add the character to variable tok

在您的版本中,您将字符添加了一个位置(C的索引从0..n-1开始)。

循环后,您仍然必须使用空字符终止字符串:

    tok[toklen] = '\0';