如何将字符串数组指针传递给新的字符数组?在C中
我有一个数组指针,我试图将这个指针的字符串传递给一个新数组。但是,我无法打印出新阵列。我的代码是:如何将字符串数组指针传递给新的字符数组?在C中,c,string,C,String,我有一个数组指针,我试图将这个指针的字符串传递给一个新数组。但是,我无法打印出新阵列。我的代码是: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *array[5] = {"may", "june", "july", "august", "september"}; char buffer[5]; for (int i=0; i&
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *array[5] = {"may", "june", "july", "august", "september"};
char buffer[5];
for (int i=0; i<5; i++) {
buffer[i] = *array[i];
printf(%s , buffer[i]);
}
}
#包括
#包括
#包括
int main(){
字符*数组[5]={“五月”、“六月”、“七月”、“八月”、“九月”};
字符缓冲区[5];
对于(int i=0;i您不能将字符串存储在char
的空间中。您可以为字符串使用char*
数组(并动态分配内存),也可以将字符串存储在二维char数组中,例如:
char buffer[5][MAX_LEN];
然后,您可以使用strcpy
或编写自己的函数将字符串从array
复制到buffer
。不确定要执行的操作。您可以使用strcpy()将一个数组的内容复制到另一个数组
char* array[5] = {"may", "june", "july", "august", "september"};
char arr[10];
for(i = 0; i < 5; ++i) {
strcpy(arr, array[i]);
printf("%s\n", arr);
}
char*数组[5]={“五月”、“六月”、“七月”、“八月”、“九月”};
char-arr[10];
对于(i=0;i<5;++i){
strcpy(arr,数组[i]);
printf(“%s\n”,arr);
}
或者,如果您想这样做,而不是与2d字符数组
char* array[5] = {"may", "june", "july", "august", "september"};
char arr2d[5][10];
for(i = 0; i < 5; ++i) {
strcpy(arr2d[i], array[i]);
printf("%s\n", arr2d[i]);
}
char*数组[5]={“五月”、“六月”、“七月”、“八月”、“九月”};
char-arr2d[5][10];
对于(i=0;i<5;++i){
strcpy(arr2d[i],数组[i]);
printf(“%s\n”,arr2d[i]);
}
这个怎么样:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *array[5] = {"may", "june", "july", "august", "september"};
char *buffer[5];
int i;
for (i=0; i<5; i++) {
buffer[i] = strdup(array[i]);
printf("%s ", buffer[i]);
}
return 0;
}
我无法编译该程序,因为它的错误为%s。我该如何编译
打印缓冲区数组,如下所示:
may june july august september
非常简单地打印出数组的每个索引
,例如
#include <stdio.h>
int main() {
char *array[] = {"may", "june", "july", "august", "september"};
int nmembers = sizeof array / sizeof *array;
for (int i = 0; i < nmembers; i++)
printf(" %s", array[i]);
putchar ('\n'); /* tidy up with newline */
}
为什么它是这样工作的?
char*array[]={“…”,…};
声明指向char
的指针数组,构成数组的每个指针初始化为指向初始值设定项中使用的每个字符串文字的开头,例如
array[0] = "may";
array[1] = "june";
...
由于您有一个指向char
的指针数组,因此每个元素都是指向char
的指针,例如char*
。当您使用name[..]
访问数组中的每个成员时,[..]
充当一个解引用。因此,只需对每个元素进行循环(int i=0;i
然后访问数组[i]
引用一个指针(例如char*
)指向每个字符串的开头,该字符串可以与printf
中的%s”
格式说明符一起使用
仔细检查一下,如果您有进一步的问题,请告诉我。启用编译器警告,并且在没有任何警告的情况下编译代码之前不要接受代码。显示的代码不需要stdlib.h
或string.h
。printf()
的第一个参数必须是C-“sting”,虽然%s
不是,但%s”
是。请注意双引号。它们只在字符的空间中存储字符。问题是缺少字符的空间,也没有nul终止符——循环中的printf
。@DavidC.Rankin也许我不清楚,但这就是我所说的“字符的空间中的字符串”。没关系,代码和问题也不是很清楚。:)
(没有丁)上面的代码只是我整个项目中的一小部分示例代码。我确实需要字符缓冲区[5]而不是*array[]。我的目的是从*array转换为精确的字符缓冲区[5]“九月”
将不适合字符缓冲区[5];
,您至少需要字符缓冲区[10];
但决不要吝啬于缓冲区大小,因此字符缓冲区[32];
是合理的。您宁愿缓冲区10000个字符太长,也不要一个字符太短。如果缓冲区大小合适,它就是strcpy(缓冲区,数组[i]);
或干脆int j=0;for(;数组[i][j];j++)缓冲区[j]=数组[i][j];缓冲区[j]=0;
$ ./bin/parraymess
may june july august september
array[0] = "may";
array[1] = "june";
...