我正在尝试打印指针的内容/值,但我也得到了其他字符。在这个例子中,我在键盘上输入了“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 指针执行此操作的详细信息。也许有人可以解释细节。
用户输入应为 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;
}
你的问题很不清楚。按理说,在你澄清你的问题之前,我什至不应该尝试回答它。
这里是让你的程序实际运行的一组最小更改:
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