gpt4 book ai didi

c - 字符串矩阵中的字符串分配(不是在声明时)

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:25 24 4
gpt4 key购买 nike

我创建了这个程序:

#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

请给我任何建议。

最佳答案

关于:

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应用于字符串文字——对于通过指针接收的字符串,您必须使用 strlen 代替(后者不计算终止空字符,但是 sizeof 计算在内)。

请注意,我故意没有使用 strcpy,因为如果长度已知,memcpy 效率更高,如果不知道,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;

当然,你还可以预初始化:

char const* str[10] = { YES, NO, YES, NO, /* ... */ };

关于c - 字符串矩阵中的字符串分配(不是在声明时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53578973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com