将返回的char转换为int

时间:2013-11-20 21:17:01

标签: c

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

编号
COUNT=$(ls | grep tool | wc -l)
printf "%s" "$COUNT"

我想获取此数字并对其执行简单的数学运算。但是,我似乎无法将此值转换为int,因此我可以将其除以2.

我尝试过像https://stackoverflow.com/a/868508/183254

这样的事情
int myint = otherint - '0';

当我进行编译时会产生分段错误并尝试进行数学运算。

我也尝试了很多次

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]

无济于事。

我已经阅读了谷歌搜索这些错误的几篇帖子,但似乎仍然无法解决我认为可能发生的事情,也许是因为我没有&#39具有提问者试图实现的内容。

这是我放在一起试图了解正在发生的事情的一个小演示。事实证明这让我更加困惑。

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 is : 44

好的,这是有道理的,因为我输入了x="44";

xx is : 182607602

笏。这看起来必须是指向某个地址的指针。根据我读到的引物,这应该来自&x;;为什么它应该来自将char 44转换为int 44

result of path is        4

好的(除了所有这些空格)。它几乎就像被填充或其他什么东西。 char path[9];while (fgets(path, 9, fp) != NULL)引起了我的怀疑,但是评论说没有工作&lt; = 8。

result of conversion is 1423813191

相同;似乎指向了地址空间。不明白为什么。

对于许多来自其他语言的人(包括我)来说,这似乎是一个混乱点 - 这是我的借口,我坚持不懈。

任何指针都会非常感激(好的引物,这个代码中发生了什么,真的是什么)。

感谢。


在youtube上找到了一个出色的9部分系列,它解释了一些C基础知识: https://www.youtube.com/playlist?list=PLkB3phqR3X40reMCBYSoNUPbDvM4kybMs。第7部分特别有用 - 它涵盖了指针,这是我困惑的一个重要部分。

3 个答案:

答案 0 :(得分:1)

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

xx = (int) x - '0';

尝试将其更改为

xx = atoi(x);

这是一个很好的参考:http://www.cplusplus.com/reference/cstdlib/atoi/

走另一条路你可能喜欢sprintf

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

您可以在此处找到更多信息:http://www.cplusplus.com/reference/cstdio/sprintf/

答案 1 :(得分:1)

你的行

xx = (int) x - '0';
来自上述帖子的

和行:

int i = c[0] - '0';

不一样。你从指针中减去,但在帖子'0'中减去了char。在您的情况下,正确的版本是(没有任何检查):

xx = x[0] - '0';

或如上文所述 - 您必须将(char *)转换为具有任何标准函数的int

答案 2 :(得分:1)

 char *x;
  x="44";
  int xx;
  xx = (int) x - '0';

在这里,您将指针中的'0'通过将其转换为int来减去。如果x的类型为char,则此逻辑可行。

您真正想要的是将字符串转换为使用 strtol() 或相关功能。

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