2016-03-31 50 views
0

所以我创建了一个读取查询文件的c程序,该文件充满了在表上执行的命令。所以我用:fscanf阅读多个字符串

char command[100]; 
while(1) 
{ 
    fscanf(query, "%s", command); 
    x=strcmp(command, "select"); 
    //continue with checking for other commands etc. 
    //if the command is stop then the loop breaks 
} 

我的问题是当我第一次调用fscanf,我知道它会将命令保存到命令数组中。但是,我应该让字符串“空”,还是空作为更好的方式来放置它?我不确定使用strcmp时是否有必要,或者一般用fscanf覆盖数组。谢谢!

+3

你应该做的是从测试中的fscanf返回值;其他任何东西都是惊喜的秘诀,比如非终止循环。 – Jens

+0

您不必担心清除数组。但还有其他一些问题需要担心,尤其是'fscanf',尤其是'%s'。 'fgets'可能是更好的选择。 –

+2

也许'char命令[100] = {“”}; while(fscanf(query,“%99s”,command)== 1){...}'将确保编码更安全。 – chux

回答

0

你不应该担心会被覆盖的东西。在使用的值之前,您应该只会(始终为)担心将其初始化。因为否则它是未定义的行为。

更重要的是,您应该始终检查在内存上运行的函数的返回值。你永远不能指望“那会工作”。因为过了一段时间,你会得到分段错误,并且不知道如何修复它。

如果你不知道如何:

int check; 

check = fscanf(query, "%s", command); 
if(check == EOF) 
    perror("fscanf");