获取字符串的长度并同时分配内存?

时间:2014-04-05 15:08:58

标签: c

我被要求做以下事情:

  1. 打印“输入整数和字符串”
  2. 扫描整数和字符串
  3. 这种情况下的整数表示字符串的长度(我可以假设输入的正确性)。问题是,我无法弄清楚如何接收长度,然后为该长度的字符串分配内存,然后插入字符串我收到我在同一行创建的指针。 我将不胜感激任何帮助!

3 个答案:

答案 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()而言,它们是不相关的数据项。