我正在使用 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;
}
答案 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';