【发布时间】:2013-11-20 21:17:01
【问题描述】:
我是第一次尝试使用 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]
无济于事。
我已经阅读了几篇关于谷歌搜索这些错误的帖子,但似乎仍然无法理解正在发生的事情,我想可能是因为我没有上下文提问者试图达到的目标。
这是我整理的一个小演示,试图了解发生了什么。结果只是让我更加困惑。
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
我已经找到并阅读了一些入门书,但我不知道它们是旧的还是什么,但除了稍微解释一下指针之外并没有太大帮助。
真正让我难以置信的是上面的 sn-p 中发生了什么:
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) 增加了我的怀疑,但正如评论那样不起作用
result of conversion is 1423813191
相同;似乎指向地址空间。不明白为什么。
对于来自其他语言的许多人(包括我)来说,这似乎是一个困惑点——这是我的借口,我会坚持下去。
任何指针都将不胜感激(好的入门,这段代码发生了什么,真的)。
谢谢。
在 youtube 上找到了一个优秀的 9 部分系列,它很好地解释了一些 C 基础知识: https://www.youtube.com/playlist?list=PLkB3phqR3X40reMCBYSoNUPbDvM4kybMs。第 7 部分特别有用——它涵盖了指针,这是我困惑的一个重要部分。
【问题讨论】:
-
x 是
char *,而不是char。您的- '0'技巧仅适用于字符。 -
在尝试执行类似任务之前,您应该阅读初学者 C 教程和/或书籍。您要查找的函数称为
strtol(); 然而,您必须对 C 类型系统有最低限度的了解,才能理解其用途(以及其他用途)。 -
@H2CO3 这就是为什么我在最后询问了指向良好当前引物(或其他任何东西)的指针。不过,谢谢。
-
@Random832 指向从 'char [3]' 分配给 'char' 的整数转换的不兼容指针
-
@stormdrain 我没有告诉你让它变成一个字符。我只是告诉你,为 char 设计的解决方案不适用于字符串。
标签: c