因此作业是使用要搜索的输入文件和要搜索的输入来实现子字符串搜索程序。我创建了以下代码:
#include <stdio.h>
#include <string.h>
int main(int argc,char *argv[])
{
FILE *fp;
fp = fopen(argv[1],"r");
if (fp == NULL)
{
printf("Error");
return 0;
}
char* tmpp[100];
int count = 0;
char* nexts = argv[2];
char* tmp = fgets(tmpp,100,fp);
while(tmp = strstr(tmp,nexts))
{
count++;
tmp++;
}
printf("%d\n\n",count);
fclose(fp);
return 0;
}
程序可以编译,但是当我在 ubuntu 终端中实现它时:
echo "aabb" >beta
./a.out beta a
1
为什么程序没有正确使用第一个参数 (argv[1]) 作为 beta 并使用第二个参数 (argv[2]) 作为 beta ?
最佳答案
您应该打开一个文件,然后从该文件读取字节到临时缓冲区:
FILE *file = fopen("file", "r");
while (1) {
char buffer[BUFSIZ+1];
size_t nread = fread(buffer, 1, sizeof(buffer)-1, file);
if (nread == 0) break; // read error or EOF
buffer[nread] = 0;
// chunk with BUFSIZ amount of bytes is available via buffer (and is zero-terminated)
}
如果您想在文件中搜索字符串/模式,请注意文件中查找的模式可能会跨越您的 block 大小边界,例如:您查找“hello”,BUFSIZ 为 512。文件包含“hello” ” 在字节 510 处。显然,如果您按 512 读取,您将得到以“he”结尾的第一个 block ,以及以“llo”开头的第二个 block 。对于所有 block 大小,这种情况的概率都不为零(SIZE_MAX 除外,但由于其他原因缓冲区大小是不可能的)。处理边界可能非常复杂。
关于c - 为什么程序不读取第二个参数文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21652274/