我被要求做以下事情:
这种情况下的整数表示字符串的长度(我可以假设输入的正确性)。问题是,我无法弄清楚如何接收长度,然后为该长度的字符串分配内存,然后插入字符串我收到我在同一行创建的指针。 我将不胜感激任何帮助!
答案 0 :(得分:2)
即使数据全部输入一行,您也不必同时阅读所有数据:
scanf("%d",&length);
str = malloc(length+1);
scanf("%s",str);
每次使用scanf时,它只会尽可能多地读取,并将其余部分留在输入缓冲区中。
答案 1 :(得分:1)
简单地抽样。检查省略。
#include <stdio.h>
#include <stdlib.h>
int main(){
int len;
char *string;
printf("Enter an integer and string :");
scanf("%d", &len);
string = malloc(len+1);
scanf("%*[ \t\n]");
fgets(string, len+1, stdin);//scanf(" %[^\n]", string);
printf("%s.\n", string);
free(string);
return 0;
}
答案 2 :(得分:0)
使用POSIX 2008或GNU scanf()
(但不适用于Mac OS X),您可以使用m
(内存分配)修饰符在一行中完成所有操作:
char *str;
int len;
if (scanf("%d %ms", &len, &str) != 2)
…Oops; something went wrong…
…use len and str…
free(str);
通过这种用法,整数是字符串长度的事实并不重要;就scanf()
而言,它们是不相关的数据项。