gpt4 book ai didi

c - 整数指针缓冲区跳过索引

转载 作者:太空宇宙 更新时间:2023-11-03 23:23:13 25 4
gpt4 key购买 nike

这很奇怪。

我有一个整数指针缓冲区。我接受一个输入,并将其附加到缓冲区。只是,当我调试时,我看到它在每个输入之间放置了一个 0。

  int *buf[BUFLEN];
char input[BUFLEN];
int temp;
printf("To move to the next step, enter q or quit\n");
printf("Please enter an integer then press Enter to insert integer into the list:\n");
while(1){
scanf("%s", input);
if (!strcmp(input, "q") || !strcmp(input, "quit"))
break;
buf[list_count] = atoi(input);
list_count++;
}

这是 lldb 向我展示的内容

(lldb) p *(int(*)[20])buf
(int [20]) $19 = {
[0] = 9
[1] = 0
[2] = 8
[3] = 0
[4] = 7
[5] = 0
[6] = 6
[7] = 0
[8] = 5
[9] = 0
[10] = 4
[11] = 0
[12] = 3
[13] = 0
[14] = 2
[15] = 0

这很奇怪,因为当我执行 p buf 时,它是正确的——但我的整个程序不工作,所以我认为我的错误在这里

(lldb) p buf
(int *[256]) $17 = {
[0] = 0x0000000000000009
[1] = 0x0000000000000008
[2] = 0x0000000000000007
[3] = 0x0000000000000006
[4] = 0x0000000000000005
[5] = 0x0000000000000004
[6] = 0x0000000000000003
[7] = 0x0000000000000002
[8] = 0x0000000000000001

此外,如何将 atoi() 返回的整数分配给整数指针数组?

也就是说,我有...

int *buf[BUFLEN];
scanf("%s", input);
buf[list_count] = atoi(input);

最佳答案

您混淆了 intint*。我大胆猜测在您的系统上 sizeof(int) == 4sizeof(int*) == 8

这意味着您的缓冲区看起来像这样:

0x00000000 0x00000009
0x00000000 0x00000008
0x00000000 0x00000007
0x00000000 0x00000006

如果您将它们打印为 int*,那将是四个条目,但如果您将它们打印为 int,它将是 8 个,每秒一个为零。


Also, how can I assign a atoi() returned integer into an array of integer pointers?

我不确定您要做什么。您是否正在尝试从用户那里读取指针(即地址)?在那种情况下,你做得很好,只需要一个 Actor ,所以:

buf[list_count] = (int*)atoi(input);

编译器应该在那里给你一个警告。不要忽视这些。

如果您试图获取用户提供给您的 int 的地址.. 它并不是那样工作的。首先,您需要将 int 存储在某个地方,在单独的 int intbuffer[BUFSIZE]; 中,然后使用该元素的地址。

关于c - 整数指针缓冲区跳过索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33962763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com