gpt4 book ai didi

c - 来自 int 的基本 C 强制转换警告指针

转载 作者:行者123 更新时间:2023-11-30 15:23:33 25 4
gpt4 key购买 nike

有人可以告诉我如何纠正这个警告/错误。我试图仅获取字符串的第一个字符来判断它是否为“-”。

错误:

grep-lite.c:15:13: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
if(strcmp((char *) pattern[0],"-") == 0)
^
grep-lite.c:29:16: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
while(strcmp((char *) argv[index][0],"-"))
^

带有警告/错误的来源:

第 15 行:

if (strcmp((char *) pattern[0],"-") == 0)

第 29 行:

while (strcmp((char *) argv[index][0],"-"))

完整来源:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "grep-lite.h"

int main(int argc, char * * argv)
{
//initailize variables
int index = 1, lineNumber = 1;
int oneMatchingLine = FALSE;
int invertOpt = FALSE, lineNumOpt = FALSE, quietOpt = FALSE;
char * pattern = argv[argc];

//check if last arguement is invalid by starting with a '-'
if(strcmp((char *) pattern[0],"-") == 0)
{
error(INVALID_PATTERN);
return EXIT_ERROR;
}

//check if they asked for help
if(strcmp(argv[index],"--help") == 0)
{
printHelpStatement();
return EXIT_SUCCESS;
}

//walk through all options
while(strcmp((char *) argv[index][0],"-"))
{
//find and set option
if(processOptions(argv[index], &invertOpt, &lineNumOpt, &quietOpt))
index++;
//if invalid option fai
else
{
error(INVALID_OPTION);
return EXIT_ERROR;
}
}

//walk through stdinput searching for pattern relationship
while(feof(stdin) == 0)
{
//initialize
char * thisLine = NULL;

// get read line with fgets
thisLine = fgets(thisLine, MAX_CHARACTERS, stdin);

//find pattern location in thisLine
char * patternLoc = strstr(thisLine, pattern);

//check if we should print this line based of patternLoc and invertOpt
if((!patternLoc != NULL && !invertOpt) || (pattenLoc == NULL && invertOpt))
{
//see if we should print this line
if(!quietOpt)
printLine(thisLine, lineNumOpt, lineNumber);
}
lineNumber++;
}

最佳答案

我将列举我在您的代码中发现的问题

  1. 您的代码中的这一行存在 strcmp() 的正确用法

    if (strcmp(argv[index],"--help") == 0)

    strcmp() 用于字符串比较,而不是字符比较,这个

    if(strcmp((char *) pattern[0],"-") == 0)

    应该是

    if (pattern[0] == '-')

    不要强制转换变量来强制编译,而是查找编译器错误/警告的实际原因。

  2. 您遇到了严重错误,您没有为 thisLine char 指针分配空间,您必须通过 malloc() 或者只是将其声明为 char 数组,例如

    char thisLine[SOME_CONSTANT_NUMBER];

    还有这个

    while(feof(stdin) == 0)

    从来都不是一个好idea相反,这样做

    char thisLine[100];
    while (fgets(thisLine, sizeof(thisLine), stdin) != NULL)
  3. 您犯了另一个非常常见的错误,c 中的数组索引从 0N - 1,所以

    char *pattern = argv[argc]

    是错误的,因为您正在读取最后一个元素之后的一个元素,正确的代码是

    char *pattern = argv[argc - 1]

    这将为您提供最后一个元素。

关于c - 来自 int 的基本 C 强制转换警告指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28755260/

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