小编Eri*_*pke的帖子

strcmp中的奇怪返回值

在检查strcmp函数的返回值时,我在gcc中发现了一些奇怪的行为.这是我的代码:

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

char str0[] = "hello world!";
char str1[] = "Hello world!";

int main() {
    printf("%d\n", strcmp("hello world!", "Hello world!"));
    printf("%d\n", strcmp(str0, str1));
}
Run Code Online (Sandbox Code Playgroud)

当我用clang编译它时,两次调用都strcmp返回32.然而,当用gcc编译时,第一个调用返回1,第二个调用返回32.我不明白为什么第一次和第二次调用strcmp在编译时返回不同的值使用gcc.

以下是我的测试环境.

  • Ubuntu 18.04 64bit
  • gcc 7.3.0
  • 铿锵6.0.0

c gcc clang

6
推荐指数
3
解决办法
600
查看次数

C :为枚举分配负值?

背景

我正在尝试将 -1 分配给枚举变量,如下所示:

typedef enum test {
        first,
        second,
}soc_ctr_type_t 

soc_ctr_type_t ctype;

...

switch(type){
   case 1:
       ctype = first;
   break;

   case 2:
      ctype = second;
   break;

   default:
      ctype = -1;
}
Run Code Online (Sandbox Code Playgroud)

如果type是默认情况,ctype则应变为 -1,但事实并非如此。我printf用来调试的时候,ctype是255。

为什么ctype变成 255 而不是 -1?

c enums

5
推荐指数
1
解决办法
8774
查看次数

C - 检查变量是否为*none*的最简洁方法?

背景:

通常,我们开发人员必须检查单个变量是否是众多选项中的至少一个.例如,

if ( (data == 125) || (data == 500) || (data == 750) )
{
    /* ... do stuff ...*/
}
Run Code Online (Sandbox Code Playgroud)

这里的建议(尽管用C#编写)提供了一个优雅的解决方案来使用这样的switch语句,

switch ( data )
{
    case 125:
    case 500:
    case 750:
        /* ... do stuff ...*/
        break;

    default:
        /* ... do nothing ... */
        break;
}
Run Code Online (Sandbox Code Playgroud)

这适用于"或"条件,但对于否定的"或"条件如下所述是丑陋的,

if ( !( (data == 125) || (data == 500) || (data == 750) ) )
{
    /* ... do stuff ...*/
}
Run Code Online (Sandbox Code Playgroud)

这可以写成

switch ( …
Run Code Online (Sandbox Code Playgroud)

c comparison if-statement

4
推荐指数
1
解决办法
149
查看次数

Sublime Text 3 - 项目源树的子目录/子文件夹中的"在文件中查找"

背景

我正在开发一个具有非常大的源树的项目.由于源树很大,Sublime Text 3的"查找文件"功能需要相当长的时间才能完成搜索.我知道我正在搜索的符号只会出现在此源代码树的某些(可能是多个)子目录中.

有没有办法限制Sublime Text 3的"查找文件"功能来搜索项目源代码树的多个(但不是全部)子目录?

sublimetext sublimetext3

4
推荐指数
1
解决办法
2749
查看次数

在 Android Kiosk 应用程序上显示 USB 权限对话框?

所以我有一个使用 startLockTask 命令固定到设备的应用程序,它有几个限制,因此用户无法逃离应用程序或更改设备的设置。

但是,用户应该能够通过 USB 将文件从设备传输到计算机,但是当设备连接到“新”PC 时,USB 权限对话框:由于 LockTask 模式,不会显示允许访问设备数据.

有没有办法在我的应用程序前面打开那个对话框?

android kiosk-mode mtp android-permissions android-usb

3
推荐指数
1
解决办法
909
查看次数

将任何长度的有符号十六进制数转换为有符号十进制数 (Excel)

当面对未知长度的有符号十六进制数时,如何使用Excel公式轻松将这些十六进制数转换为十进制数?

例子

Hex
---
00
FF
FE
FD
0A
0B
Run Code Online (Sandbox Code Playgroud)

excel hex decimal excel-formula

2
推荐指数
2
解决办法
7290
查看次数