C 将返回的字符转换为int

C 将返回的字符转换为int,c,C,我第一次尝试使用C。我有一个调用bash脚本的程序。此脚本printf是一个通过 COUNT=$(ls | grep tool | wc -l) printf "%s" "$COUNT" 我想获取这个数字并对其执行一个简单的数学运算。但是,我似乎无法将这个值转换为int,以便将其除以2 我试过这样的方法 当我让它编译并试图做数学运算时,它产生了一个分段错误 我还尝试了许多迭代 int cc; cc = count - '0'; // warning: assignment makes inte

我第一次尝试使用C。我有一个调用bash脚本的程序。此脚本
printf
是一个通过

COUNT=$(ls | grep tool | wc -l)
printf "%s" "$COUNT"
我想获取这个数字并对其执行一个简单的数学运算。但是,我似乎无法将这个值转换为
int
,以便将其除以2

我试过这样的方法

当我让它编译并试图做数学运算时,它产生了一个分段错误

我还尝试了许多迭代

int cc;
cc = count - '0';
// warning: assignment makes integer from pointer without a cast [enabled by default]
// or
// warning: initialization from incompatible pointer type [enabled by default]
无济于事

我已经阅读了一些关于谷歌搜索这些错误的帖子,但似乎仍然无法理解正在发生的事情,我想可能是因为我不了解提问者想要实现的目标

这里有一个小演示,我放在一起,试图了解发生了什么。结果只是让我更加困惑

int main(){
  char *x;
  x="44";
  int xx;
  xx = (int) x - '0';
  printf("x is : %s\n", x);
  printf("xx is : %d\n",xx);// x is : 23703288
  char command[64];

  char path[9];// won't work if set to <=8
  int status;
  FILE *fp;

  //this shell script just counts the number of files in a directory
  //that match a certain string. 
  strcpy(command, "/test/test.sh");// returns 0-9; in this case it's returning 4 (supposed to anyway)


  fp = popen(command, "r");
  if (fp == NULL)
    /* Handle error */;

  while (fgets(path, 9, fp) != NULL) //again, won't work if arg2 is <=8
    //printf("%s", path);

  status = pclose(fp);

  int cc;
  cc = (int) path - '0';

  printf("result of path is %s\n",path );    // result of path is        4
  printf("result of conversion is %d\n", cc);// result of conversion is 1582717056
}

output:

x is : 44
xx is : 182607602
result of path is        4
result of conversion is 1423813191
好的,这是有道理的,因为我输入了
x=“44”

xx is : 182607602
沃特。看起来它一定是指向某个地址的指针。根据我读到的引物,这应该来自类似
&x;为什么它来自于应该将
char 44
转换为
int 44

result of path is        4

好的(除了所有的空格)。看起来像是被填充了什么的<代码>字符路径[9]
while(fgets(path,9,fp)!=NULL)
加剧了我的怀疑,但正如所评论的那样,当您使用此行将两位数转换为整数时,将不起作用:

xx = (int) x - '0';
试着把它改成

xx = atoi(x);
这里有一个很好的参考:

走另一条路,你可能会喜欢sprintf

sprintf (buffer, "%d plus %d is %d", a, b, a+b);

您可以在此处找到更多信息:

使用此行将两位数转换为整数:

xx = (int) x - '0';
试着把它改成

xx = atoi(x);
这里有一个很好的参考:

走另一条路,你可能会喜欢sprintf

sprintf (buffer, "%d plus %d is %d", a, b, a+b);

您可以在此处找到更多信息:

使用此行将两位数转换为整数:

xx = (int) x - '0';
试着把它改成

xx = atoi(x);
这里有一个很好的参考:

走另一条路,你可能会喜欢sprintf

sprintf (buffer, "%d plus %d is %d", a, b, a+b);

您可以在此处找到更多信息:

使用此行将两位数转换为整数:

xx = (int) x - '0';
试着把它改成

xx = atoi(x);
这里有一个很好的参考:

走另一条路,你可能会喜欢sprintf

sprintf (buffer, "%d plus %d is %d", a, b, a+b);
您可以在此处找到更多信息:

您的线路

xx = (int) x - '0';
以及上述帖子中的行:

int i = c[0] - '0';
它们不一样。您从指针中减去,但在post中“0”是从字符中减去的。在您的情况下,正确的版本是(无任何检查):

或者像上面的帖子一样-您必须使用任何标准函数将(char*)转换为int

xx = (int) x - '0';
 char *x;
  x="44";
  int xx;
  xx = (int) x - '0';
以及上述帖子中的行:

int i = c[0] - '0';
它们不一样。您从指针中减去,但在post中“0”是从字符中减去的。在您的情况下,正确的版本是(无任何检查):

或者像上面的帖子一样-您必须使用任何标准函数将(char*)转换为int

xx = (int) x - '0';
 char *x;
  x="44";
  int xx;
  xx = (int) x - '0';
以及上述帖子中的行:

int i = c[0] - '0';
它们不一样。您从指针中减去,但在post中“0”是从字符中减去的。在您的情况下,正确的版本是(无任何检查):

或者像上面的帖子一样-您必须使用任何标准函数将(char*)转换为int

xx = (int) x - '0';
 char *x;
  x="44";
  int xx;
  xx = (int) x - '0';
以及上述帖子中的行:

int i = c[0] - '0';
它们不一样。您从指针中减去,但在post中“0”是从字符中减去的。在您的情况下,正确的版本是(无任何检查):

或者像上面的帖子一样,您必须使用任何标准函数将(char*)转换为int

 char *x;
  x="44";
  int xx;
  xx = (int) x - '0';
在这里,通过将指针强制转换为int来从指针中减去
'0
。如果
x
的类型为
char
,则此逻辑将起作用

您真正想要的是使用或相关函数将字符串转换为字符串

同样,您也可以将
path
转换为整数,稍后在代码中执行此操作

在这里,通过将指针强制转换为int来从指针中减去
'0
。如果
x
的类型为
char
,则此逻辑将起作用

您真正想要的是使用或相关函数将字符串转换为字符串

同样,您也可以将
path
转换为整数,稍后在代码中执行此操作

在这里,通过将指针强制转换为int来从指针中减去
'0
。如果
x
的类型为
char
,则此逻辑将起作用

您真正想要的是使用或相关函数将字符串转换为字符串

同样,您也可以将
path
转换为整数,稍后在代码中执行此操作

在这里,通过将指针强制转换为int来从指针中减去
'0
。如果
x
的类型为
char
,则此逻辑将起作用

您真正想要的是使用或相关函数将字符串转换为字符串


同样,您也可以将
路径
转换为整数,稍后在代码中执行此操作。

x是
字符*
,而不是
字符
。你的
-“0”
技巧只能在字符上使用。在尝试执行类似任务之前,你应该阅读初学者C教程和/或书籍。您正在查找的函数名为
strtol()
;然而,你必须对C型系统有一个最低限度的了解,才能理解它的用途(和其他)。@H2CO3这就是为什么我在最后问到好的当前引物(或其他任何东西)的指针。不过,谢谢。@Random832不兼容的整数转换指针从“char[3]”分配给“char”。@Stormdain我没有告诉您将其设置为char。我只是告诉你,为字符设计的解决方案对字符串不起作用。x是
char*
,而不是
char
。你的
-“0”
技巧只对字符有效。你应该阅读初学者C