【问题标题】:How to use strcpy() with array elements?如何将 strcpy() 与数组元素一起使用?
【发布时间】:2019-09-02 03:44:30
【问题描述】:

我有一个名为array 的数组,我想复制从某个文件中读入的单词并将其存储到该数组中的某个索引处,我该怎么做?

我认为当读取文件时,文件中的所有输入都是“字符串”形式。因此,如果文件中存在数字 100,则表示为“100”。

我尝试了以下方法:

#define maxlength 10

char array[10];
int i = 0;
char word[maxlength];

strcpy(array[i], word); //error
array[i] = word; //error

我的猜测是因为word 是一个字符数组,它实际上不是要复制的字符串。有没有办法可以将word[] 以字符串格式复制到array[] 中? IE。数组中的索引 0 = ["hello"] 索引 1 = ["world"] 等

【问题讨论】:

  • 发布真实代码 - minimal reproducible examplemaxlength 是什么?
  • "有没有办法可以将 word[] 以字符串格式复制到数组[] 中。即数组中的索引 0 = ["hello"] 索引 1 = ["world "] 等" 没有。你有一个字符数组。问题是:你打算如何将hello 打包成一个字符?
  • 你试过strcpy(array, word); 吗?
  • char array[10] 声明了一个 10-char 数组。引用数组元素时 [ ] 充当取消引用。因此,虽然array 可能是char * 类型(由于C11 Standard - 6.3.2.1(p3)),但array[i]char 类型,导致您尝试strcpy 失败,因为array[i] 是不兼容的类型。

标签: c arrays string c-strings


【解决方案1】:

您对“字符串”概念的理解可能是错误的。

C 中的字符串只不过是一个字符数组,末尾带有 NUL 终止符(字符 '\0')。

你有什么:

char array[10];

不是字符串数组,只是字符数组。如果您想在array[0] 中存储整个字符串,则必须将您的数组声明为char 的数组数组,如下所示:

char array[10][10];

现在,array 的每个元素都可以包含一个最长为 9 个字符的字符串(请记住,最后一个必须是终止符 '\0')。

要复制您的word,您首先必须确保它是一个有效的字符串(它应该再次以'\0' 结尾),并且确保它是长度少于 9 个字符(如果算上终止符,则为 10 个),因为您声明了 array[10][10]。一旦你知道它是一个格式正确的字符串,你就可以复制它:

strcpy(array[0], word);

如果你不知道word是否正确以NUL结尾,或者你不知道它是否太长,那么你可以先尝试复制strncpy()的所有10个字符,然后确保它正确终止,手动将'\0' 放在末尾:

strncpy(array[0], word, 10);
array[9] = '\0';

【讨论】:

  • 嗯,我确实阅读了这个问题 - 老实说,这有点含糊,我的回答至少是一次尝试!仍然因为它似乎不受欢迎,我会擦掉它。但是,您的某些回答只是重复了我已经说过的话。嗯。
【解决方案2】:

首先让我们清除一些语法错误,然后我们可以复制。

  1. cahr 字[最大长度]; ---> 字符字[最大长度]; 我希望您在某处定义了 maxlength = 10,因为两个长度应该相同,否则会出现运行时异常。

  2. strcpy(array[i], word); //错误 ---> strcpy(array, word); strcpy 期望目标和源都应该是 char* 类型,并且当您通过“[i]”访问数组元素时,您传递的数组 [i] 只是 char 类型,因此只能在 strcpy 中使用“array”。

  3. array[i] = word //error ---> 在数组副本中不需要这个,甚至在语法上你尝试将 char* 分配给 char 也是错误的。

所以我们最终的代码 sn-p 会是这样的:

char array[10];

char word[10] = {'T','h','a','n','k',' ','y','o','u'};

strcpy(array, word); // word is copied to the array

cout << array; ---> Thank you

【讨论】:

  • 您的答案将崩溃(可能),因为word 不是以空值终止的!
  • @Adrian 碰巧有 9 个大小为 10 的数组的初始化程序,规则是在这种情况下任何没有初始化程序的元素都设置为 0 。但是很难理解为什么有人会写这个而不是仅仅使用字符串 lteral
猜你喜欢
  • 2013-12-23
  • 2016-07-30
  • 2013-02-08
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-09
  • 2012-10-07
  • 1970-01-01
相关资源
最近更新 更多