c - strcmp 比较相同的字符串但不进入循环

标签 c arduino

char* timecompare(){
    char time[8];
    snprintf(time,8,"%i:%02i",hour(),minute());
    return time;
}

char* timefeed = "8:0";

if (strcmp(timecompare(), timefeed) == 0){
    Serial.println("hello"); 
}

我将此作为我的代码,当 timecompare() 和 timefeed 都相等时它没有打印 hello?我这是一个指针问题?我不是将 timecompare() 与 timefeed 进行比较,而是将 timecompare() 与“8:0”进行比较,然后循环工作...这是 timefeed 变量的问题吗?

最佳答案

您正在从 timecompare() 返回堆栈分配的变量 time。这是非法的,因为堆栈分配的内存仅在声明变量的函数中有效。

相反,您需要返回堆分配的字符串。您的编译器应该警告您这一点。你可以这样写:

char* timecompare(){
    char* time = malloc(8);
    snprintf(time,8,"%i:%02i",hour(),minute());
    return time;
}

记得在用完后free()内存。

关于c - strcmp 比较相同的字符串但不进入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827343/

相关文章:

c - 如何在默认程序中打开文件 - Linux

c - 自由(): invalid next size (fast) in C

c - 我有错误,因为表达式必须是可修改的值

python-2.7 - 如何使用带有 I2C 的 Raspberry Pi 从 Arduino 读取数据

ssh - 如何在 LAN 上检测 Arduino Yún/Yún shield IP 地址

java - jssc (serialPort.readBytes()) 与 Arduino

python - 创建大伽罗瓦域矩阵并对其求逆

c - 从 C 中的 wav 文件中删除暂停

sockets - 作为 UDP 客户端的 Netcat 不接收来自 Arduino Wifi Shield 的响应数据包。简单的 C UDP 客户端。为什么?

c++ - Arduino - 如何返回正确的位图图像数组