【发布时间】:2021-02-25 14:36:53
【问题描述】:
我正在尝试获取一长串整数作为输入,例如:
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003
但不允许使用数组。所以我决定在指针的帮助下接受它们。
0, 1, 2, 3, 4, 5, 6 这些整数分别代表'', '-', '_', '|', '/', '\', 'O'
这意味着,1应该被翻译成''(空格)或者2应该被翻译成'-'
我被要求编写一个函数来读取这些整数文件,如上解密它们并可视化 新形式。在将它们翻译成新的形式之前,我想确保我正确地使用它们并且我也希望能够正确地打印它们。
char *p = malloc(1000);
scanf("%1000s",p);
for(; *p != '\n'; p++)
printf("%c",*p);
当我输入abc 作为输入时,编译器给了我这个输出:
abcabc
为什么会这样?像这样使用 malloc 可以吗?别忘了,数组是不允许的!
【问题讨论】:
-
%s不会存储换行符'\n'。*p != '\n'应该是*p != '\0'。 -
另外
%1000s应该是%999s或malloc(1000)应该是malloc(1001)以保留终止空字符的空间。 -
嗯...使用
calloc()来避免使用malloc()? -
你知道当你使用一个指针作为来自
malloc的返回值时,你把它作为一个数组的第一个元素的指针吗? -
@nicholai_hel:这只是一个评论。根本不使用数组,您根本无法处理对象序列,因为指针算术仅在数组内部有效。我假设要求是只使用动态数组,否则只有魔法可以帮助......
标签: c pointers encryption malloc