如何打印这个指针的值(用户输入)?

问题描述 投票:0回答:2

我正在尝试打印指针的内容/值,但我也得到了其他字符。在这个例子中,我在键盘上输入了“p”,但我得到了其他整数和字符以及字母“p”。

有人可以解释发生了什么吗?我如何修改代码以仅打印我输入的字符而不打印额外的字符? (我假设其他字符是指针的内存地址)

char userInput [1];
uint8_t * temp = NULL;
temp = (uint8_t *)malloc(sizeof(uint8_t)*event.size);



sprintf( userInput, "%s", temp);
printf("User input ="  "%s" "\n", temp);

我的输出:用户输入 = p��?4��?

如果我明确打印指针“temp”,我会得到以下信息(我假设是地址):

printf("%p",(void*)temp);

我的输出:0x3ffbbd88

我试图尊重指针,这样我只能得到字母“p”。但是,它不起作用。我可能遗漏了有关如何使用我正在使用的 uint8_t 指针执行此操作的详细信息。也许有人可以解释细节。

c pointers
2个回答
0
投票

用户输入应为 char(string)* 然后转换为 int。我认为这比立即尝试 push int 更好。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>

const int CHAR_SIZE = 1;
    int main(){
    int charCount = 6;
    char* str = (char *) malloc(charCount * CHAR_SIZE);

    printf("Enter x: ");
    scanf("%s", str);
    //scanf("%d", $intVariable);

    int x = atoi(str); //fail = 0

    printf("User input = %d\n", x);
    return 0;
}

0
投票

你的问题很不清楚。按理说,在你澄清你的问题之前,我什至不应该尝试回答它。

这里是让你的程序实际运行的一组最小更改:

char userInput [20];
uint8_t * temp = NULL;
temp = malloc(10);

printf("enter text: "); fflush(stdout);
scanf("%9s", temp);

sprintf( userInput, "%s", temp);
printf("User input ="  "%s" "\n", temp);

我已经摆脱了

event.size
,因为你没有定义它,我不知道它应该是什么。目前我只是任意分配 10 个字节。

我已经添加了对

scanf("%9s", temp)
的调用,以实际读取用户输入到
temp
中。由于
temp
的大小为 10,我已经告诉
scanf
不要读取长度超过 9 的字符串,以便为空终止符留出空间。

我已经把

userInput
数组变大了,因为
[1]
太小了。

如果我运行这个程序,它会打印:

enter text:

如果我输入,比如说,

test
它会打印:

User input =test
© www.soinside.com 2019 - 2024. All rights reserved.