如何将scanf中的字符串存储在数组

时间:2017-07-11 08:47:22

标签: c arrays string scanf

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

int main(){
    char *array[3];
    scanf("%s",----);   // The input is james.
    return 0;
}

如何将james作为输入存储在数组[1]中,以便它等同于array[1] = "james";?所以问题是我必须把几个字符串作为输入,然后我想将它存储在一个数组中,以便像我一样存储array[1] = "James";

如果可能,请提供代码。

2 个答案:

答案 0 :(得分:1)

你可能想要类似的东西:

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

int main() {
  char array[3][10];  // array of 3 strings of at most 9 chars
  scanf("%s", array[0]);
  scanf("%s", array[1]);

  printf("%s\n%s\n", array[0], array[1]);
  return 0;
}

或者通过动态分配内存:

int main() {
  char *array[3];

  array[0] = (char*)malloc(10);  // allocate space for a string of maximum 9 chars
  array[1] = (char*)malloc(10);  // allocate space for a string of maximum 9 chars

  // beware: array[2] has not been initialized here and thus cannot be used

  scanf("%s", array[0]);
  scanf("%s", array[1]);

  printf("%s\n%s\n", array[0], array[1]);
  return 0;
}

免责声明:为简洁起见,此处绝对没有错误检查。如果输入的字符串超过9个字符,则此程序的行为将不确定。

预测下一个问题:尽管为10个字符保留空间,我们只能存储最多9个字符长度的字符串,因为NUL字符串终止符需要一个字符。

答案 1 :(得分:1)

您应该做的是scanf("%s", array[1]);,但由于array[1]是非初始指针,因此您应首先malloc() array[1] = malloc(length_of_your_string_plus_NUL_char);

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

int main(){
char *array[3];
array[1] = malloc(100);   // I used a large number. 6 would suffice for "James"
scanf("%99s", array[1]);   // The input is james. Note the "99" (string width) addition that ensures you won't read too much and store out of bounds
return 0;
}