【问题标题】:Unsigned Long does not contain valid valueUnsigned Long 不包含有效值
【发布时间】:2013-04-02 13:28:28
【问题描述】:

我的问题很奇怪。 事实上,我列出了给定进程的所有子进程。

为此,我使用:How to find all child processes? 和 RC 的答案。

但是,我需要一个带有 unsigned long 的出口。 该解决方案基于char[]

给出了一些字符串

如果我想获得unsigned long,我需要修改代码以仅获得数值。另一种情况将不正确。

所以我将char 设置为unsigned long。然后,scanf%ld 标签。

但是我越来越废话了......

为什么这不起作用?

编辑:代码:

const char *name = "top";
char command[100];
unsigned long parentID; unsigned long processID;

strcpy(command, "ps -C "); strcat(command, name); strcat(command, " --format '%P %p'");

FILE *fp = popen(command, "r");
    if (fp == NULL) fprintf(stderr, "Error in reading PID child processes information !\n");

while(fscanf(fp, "%lu %lu", parentID, processID) != EOF) {
    printf("PID : %lu Parent : %lu \n", processID, parentID);
}

return processID;

有了%schar[256],这项工作!

编辑:想法

我正在考虑两种方法来做到这一点:

  • 首先,使用unsigned long 而不是char[]
  • 其次,读取文件后将char[]转换为unsigned long。但是,我需要逐行阅读。 popen 可以吗?

【问题讨论】:

  • 您的代码有错误。
  • 显然你的代码是错误的。由于您没有显示您的代码,因此您将其变得不必要地困难。忠告:不要隐瞒细节。
  • 好的,我正在添加它!
  • Thx 顺便说一句,非常令人鼓舞! ;) 很高兴在这里成为初学者!

标签: c++


【解决方案1】:

所以我将char 设置为unsigned long。然后,scanf()%ld 标签。

在这里,您的程序会调用未定义的行为,因为 unsigned long 的类型说明符是 %lu

(而且您的代码中可能还有其他一些我们无法判断的错误;将返回值从 char * 更改为 unsigned long 绝非易事。)

【讨论】:

  • 有没有一种方法可以将 char[] 转换为 unsigned long,它比字节移位更简单?我可以用popen打开一个文件并逐行读取吗?
  • @MikeTelson 现在这两者有什么关系?
  • 好吧,如果第一种方法不起作用,我需要一个 B 计划……这是为了从 char[] 获取 unsigned long,我已经有了一个输出为 char[] 的工作解决方案。我看到了从 char[] 转换为 unsigned 的方法......但它们有点......很难......
  • @MikeTelson char[] 实际上是一个以 NUL 结尾的字符串,具有非负整数的十进制(或任何类型)表示吗?如果是,请使用strtoul()
  • 嗯,它似乎工作!但我也得到了一个字符串,它被转换为 0。但我不认为任何用户进程都有 PID“0”,不是吗?如果没有,一个简单的 if 就可以解决问题
猜你喜欢
  • 2013-06-21
  • 1970-01-01
  • 2016-07-29
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多