c - IF 语句无法检查正确的值

标签 c if-statement

<分区>

我有一个函数可以将字符串坐标转换为 0-9 之间的整数。 现在该函数似乎无法获取字符串 A10(例如)并将其转换为 0,9。也许有人可以告诉我为什么?

Point TranslateCoordinate(char* c){
        Point newpoint;
        newpoint=malloc(sizeof(Point));//this is beacuse its an ADT
        int row=c[0];
        int column;
        newpoint->x=row-'A';
        if(c[1]== '1' && c[2]== '0'){
            newpoint->y=9;
            return newpoint;
        }
        column=c[1];
        newpoint->y=column-'1';
        return newpoint;
}

我应该注意到字符串的值范围从 110 和从 AJ . 这也是来自 main 的函数调用;它从文件中获取字符串并将其分配给名为 submarine 的结构。

while(fgets(buffer,100,fptr))
{
    if(isalpha(buffer[0]))
    {
        token=strtok(buffer,"-");
        start=TranslateCoordinate(token);
        token=strtok(NULL,"\n");
        end=TranslateCoordinate(token);
        s=Makesub(start,end,9);
        P1list=Add_to_list(s,P1list);
    }
}

源代码中所写的结构本身:

struct Point_s
{
    int x;
    int y;
};

header中写的typedef:

typedef struct Point_s* Point;

最佳答案

    Point newpoint;
    newpoint=malloc(sizeof(Point));

这不可能是正确的。

Point 似乎被定义为指向某个结构的指针。这本身就是一种糟糕的风格,会给你带来麻烦。如果你想保留这个,最简单的正确调用顺序是

    newpoint = malloc(sizeof(*newpoint));

在我看来,即使没有指针类型定义,它也是一种很好的全能风格,所以我建议始终使用它。

    something = malloc(sizeof(*something));

易于内存,如果您更改了某物的类型,则无需更新。

我建议放弃 typedef 并将其替换为显式指针表示法:

typedef struct point
{
        ...
} Point;

Point* TranslateCoordinate(char* c){
    Point* newpoint;
    newpoint = malloc(sizeof(*newpoint));
    ...

如果 sizeof(Point) 小于 sizeof(*newpoint),则代码现在具有未定义的行为,因此任何事情都可能发生。

关于c - IF 语句无法检查正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231977/

相关文章:

c - vC : scan numeric input until EOF

matlab - matlab中的三元运算符

Python:多线程还是循环?

c# - 检查整数是否== null

c++ - 如何在不更改原始 tm 结构的情况下使用 mktime()?

检查字符串是否是字谜

c - If Thens 比乘法和赋值更快吗?

c - 为什么我不能动态分配结构体的这个字符串的内存?

php - Laravel 5.2 IF 语句语法,根据值更改名称

javascript - 如果我的函数评估为 true,如何使我的确认语句发布状态,如果为 false,如何使确认语句发布状态?