gpt4 book ai didi

c - 命令提示符的字符串搜索 C 程序

转载 作者:行者123 更新时间:2023-11-30 20:26:57 27 4
gpt4 key购买 nike

我写了一个搜索字符串的C程序。问题是 MyStrstr() 函数不适用于命令提示符。它仅适用于 IDE。那么,任何人都可以告诉我如何修复使用命令提示符的代码。关于...

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define ARGUMENT_COUNT 3
#define FILE_INDEX 2
#define SEARCH_INDEX 1
#define BUFFER 256
#define SUCCESS 0
#define ERRCODE_PARAM 1
#define ERRCODE_FILENAME 2
#define MSG_USAGE "String Search Program === EXER5 === by Newbie\nUsage: %s Search_String fileName"
#define MSG_ERROR "Can not open file. [%s]"

char* MyStrstr(char* pszSearchString, char* pszSearchWord);

int main(int argc, char* argv[])
{
FILE* pFile = NULL;
char szData[BUFFER];
char* pszCutString = NULL;

if(argc != ARGUMENT_COUNT) {
printf(MSG_USAGE, argv[0]);
return ERRCODE_PARAM;
}

pFile = fopen(argv[FILE_INDEX], "r");
if(pFile == NULL) {
printf(MSG_ERROR, argv[FILE_INDEX]);
return ERRCODE_FILENAME;
}

pszCutString = MyStrstr(szData, argv[SEARCH_INDEX]);
if(pszCutString != NULL) {
printf("%s", pszCutString);
}

fclose(pFile);
pFile = NULL;
return SUCCESS;
}

char* MyStrstr(char* pszSearchString, char* pszSearchWord) {

int nFcount = 0;
int nScount = 0;
int nSearchLen = 0;
int nIndex = 0;
char* pszDelString = NULL;
char cSLen = 0;
size_t len = 0;

if(pszSearchString == NULL || pszSearchWord == NULL) {
return NULL;
}

while(pszSearchWord[nSearchLen] != '\0') {
nSearchLen++;
}
if(nSearchLen <= 0){
return pszSearchString;
}

cSLen = *pszSearchWord++;
if (!cSLen) {
return (char*) pszSearchString;
}

len = strlen(pszSearchWord);

do {
char cMLength;
do {
cMLength = *pszSearchString++;
if (!cMLength)
return (char *) 0;
} while (cMLength != cSLen);
} while (strncmp(pszSearchString, pszSearchWord, len) != 0);
return (char *) (pszSearchString - 1);
}

最佳答案

您想要打开一个文件,在该文件的内容中搜索字符串并返回/打印该字符串。相反,你正在做:

char szData[256];          // <-- making an uninitialized buffer
char* pszCutString = NULL;

pFile = fopen(argv[2], "r"); // <-- Opening a file
pszCutString = MyStrstr(szData, argv[1]); // <-- searching the buffer
if(pszCutString != NULL) {
printf("%s", pszCutString);
}
fclose(pFile); // <-- Closing the file

因此,您永远不会用argv[2]中记录的文件内容填充缓冲区szData。您正在尝试在未初始化的缓冲区中搜索字符串。你很幸运,结果只是“没有输出”。

您需要将argv[2]中的文件内容放入缓冲区szData中,然后进行搜索。这可以通过添加对类似 read() 的函数的调用来完成。或fscanf()

注1:
我假设当您说这在 IDE 中“有效”时,代码有点不同,并且您没有使用命令行参数。

注2:
您还应该在尝试读取/关闭 pFile 之前检查 fopen() 是否有效,如果您的文件可能大于 256 个字符,您需要将代码更改为要么有一个动态大小的字符串,要么您需要循环缓冲区填充(但随后您必须担心将单词分开),或者使用其他一些机制来检查完整文件。

关于c - 命令提示符的字符串搜索 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23089291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com