Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符串数组指针传递给新的字符数组?在C中_C_String - Fatal编程技术网

如何将字符串数组指针传递给新的字符数组?在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";
...