好吧,我有了我的数组:
unsiged int *arr = (unsigned int*)malloc(200 * sizeof(unsigned int));
这样声明,我编写了一个循环,循环遍历数组的每个元素并调用一个以该元素作为参数的函数,如下所示:
for (size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
sprintf(buffer, "/proc/%zu/cmdline", arr[i]);
printf("/proc/%x/cmdline", arr[0]);
printf("/proc/%zu/cmdline", arr[i]);
checkIfRunning(buffer);
}
checkIfRunning 函数包含:
void checkIfRunning(char *filepath) {
FILE *fh;
char buf[500];
fh = fopen(filepath, "r");
if (!fh)
exit(1);
我的代码总是在 exit(1) 处退出,我从两个 printf 语句中得到以下(错误)输出:
/proc/bbb07a63/cmdline
/proc/3148905059/cmdline
我做错了什么
请注意,我是 c 的新手,如果新手提出问题,我很抱歉,还要注意 printf 的输出每次都不同,我认为这意味着它是垃圾。
最佳答案
对于 unsigned int *arr
,表达式sizeof(arr)
是指针值的大小(例如 32 位系统上的 4 个字节),而不是该指针所指向的内容的“长度”。这与 unsigned int arr[100]
之类的声明不同。 ,其中sizeof(arr)
会给你100*sizeof(unsigned int)
。您可能接管了模式sizeof(arr) / sizeof(arr[0])
来自像 unsigned int[100]
这样的数组声明,但这不能用于动态分配的内存。所以你宁愿写 for (size_t i = 0; i < 200; i++)
,或写 #define ARRSIZE 200
并使用ARRSIZE
然后是malloc
和 for 循环。
其次,正如 GrahamS 所提到的,您没有显示任何初始化内存的代码。如果没有这样的初始化,则程序的行为是未定义的。
关于c - 在c中循环整数数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44091258/