c - if 语句看起来可以接受,但有错误 : expected expression before ‘)’ token

标签 c string gcc strcmp

我已将代码最小化为重现此错误所需的代码。我有一个我认为非常好的 if 语句,但 gcc 坚持认为它不是一个有效的语句。

#define SOMECHAR *

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

int main(){
    char* my_string = (char*) malloc(sizeof(char[5]));
    strcpy(my_string, "aa*a");
    int i;

    for (i=0; i< sizeof(my_string); i++){
        if(strcmp(&my_string[i], SOMECHAR) == 0){
            printf("%s", "b");
        } else {
            printf("%s", &my_string[i]);
        }   
    }
}

最佳答案

首先,size_of(my_string) 是指针的大小,而不是它指向的数组的大小。

接下来,strcmp(&my_string[i], SOMECHAR) 将扩展为 strcmp(&my_string[i], *),您需要:

#define SOMECHAR "*"

但是,我相信您想要这个:

    if(my_string[i] == '*'){
        putchar('b');
    } else {
        putchar(my_string[i]);
    }  

正如 M.M 在评论中所说,你泄漏了分配的内存

如果您确实需要定义该角色,只需执行以下操作:

#define SOMECHAR '*'

/*some other code */

    if(my_string[i] == SOMECHAR){
        putchar('b');
    } else {
        putchar(my_string[i]);
    } 

关于c - if 语句看起来可以接受,但有错误 : expected expression before ‘)’ token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40414539/

相关文章:

在C中创建和写入多个txt文件

c# - 从字符串数组创建更大的字符串

c++ - FORTIFY_SOURCE 和 Og 优化级别

使用 -D 选项时 gcc 编译器错误

c - Valgrind 和 strlen() 函数错误

c - C 中的 Endian 转换有符号

java - 为什么在 Java 中 "!sort.getTestIssue().equals("Y")"不从 nasdaqlisted.txt 中删除测试股票?

c - 为什么余数运算符会因不同的数据类型而失败?

c# - 监控最常见的 Web 浏览器 c#/vc++/c

java - 打印 float 时失去精度