我已经创建了这个程序:
#include<stdio.h>
#include<conio.h>
void main()
{
char str[1][10][4];
str[1][1]="YES";
str[1][2]="NO";
printf("%s",str[1][1]);
getch();
}
str是具有1行10列的矩阵。 但是该程序显示错误。
我要这样向每个字段分配(不扫描)
str[1][1] str[1][2] str[1][3]..........
YES NO YES
请以任何方式建议我。
答案 0 :(得分:2)
那又怎么样:
char str[10][4] = { "Yes", "No", "Yes", /* ... */ };
请注意,结尾的空字符还需要一个数组位置!
如上所示,其他(未分配)值设置为0,因此如果没有提供足够的初始化程序,您将得到空字符串。
顺便说一句,您可以 将第一个数组参数放在一个变体下方,并使用指定的初始化程序进行操作 :
char str[][4] = { [0] = "Yes", [7] = "Yes", [10] = "No", [12] = "No", /* ... */ };
同样,无符号值为0,外部数组长度为条目数(如果未使用指定的初始化程序)或足够长以包含所提供的最高索引(因此大小为最高索引+ 1)。
编辑:稍后分配:
char str[10][4];
// ...
memcpy(str[7], "Yes", sizeof("Yes"));
请注意,您可以将sizeof
仅 应用于字符串 literals –对于通过 pointer 接收的字符串,必须使用{而是使用{1}}(尽管strlen
确实不计算终止的空字符)。
请注意,我故意不使用sizeof
,因为如果知道长度,则memcpy效率更高;如果不知道,则strcpy
是不安全的(由于超出目标数组界限而导致未定义的行为)
如果使用指针,事情会变得简单:
strcpy
当然,您仍然可以预先初始化:
char const* const YES = "Yes"; // constants for safer usage
char const* const NO = "No";
char const* str[10]; // array of pointers, not array of arrays
str [7] = NO;
答案 1 :(得分:1)
您的变量str
代表大小为1 * 10 * 3字节(大小为char
)的内存中的一个块。您的代码尝试执行的操作是将字符指针(char*
)分配给数组(str[1][1]
是一维数组),这没有任何意义。
因此,基本答案是您需要使用strncpy
将字节“ YES”或“ NO”中的字节复制到数组中。
还请注意
str[1][1]="YES"
行的末尾缺少分号;
答案 2 :(得分:0)
Carry索引中的第1个基于0的索引。所以你最不喜欢
str[1][1] str[1][2] str[1][3] YES NO YES
但是
str[0][0] str[0][1] str[0][2] YES NO YES
要实现这一目标,您有三种可能。
由于无法分配数组,请复制数组的内容。
定义大小为4的char
数组的2D数组,并将长度小于4 char
的东西复制到其中
char str[1][10][4];
strcpy(str[0][0], "YES");
strcpy(str[0][1], "NO");
strcpy(str[0][2], "YES");
strcpy(str[0][3], "BAR");
您以后可以分别更改每个char
:
strcpy(str[0][0][0] = '1'; /* gives you "1ES" */
strcpy(str[0][2][0] = '3'; /* gives you "2ES" */
如果只需要使用"YES"
和"NO"
,则可以定义一次,并将数组变成指向char
的2D指针数组,并让其条目引用之前定义的值:
char yes[] = "YES";
char no[] = "NO";
char * str[1][10];
str[0][0] = yes;
str[0][1] = no;
str[0][2] = yes;
如果以后将char
更改为一个,则会更改all的值:
strcpy(str[0][0][0] = '1'; /* gives you "1ES" for str[0][0] and str[0][2] */
strcpy(str[0][2][0] = '2'; /* gives you "2ES" for str[0][0] and
如果您不想单独更改字符串的字符,请按照上面的2.定义它们,但是通过执行以下操作将它们定义为指向常量的指针:
char * yes = "YES";
char * no = "NO";
char * str[1][10];
str[0][0] = yes;
str[0][1] = no;
str[0][2] = yes;
您以后不能更改char
。