gpt4 book ai didi

c - 在C中打印不均匀(非二次)矩阵的内容

转载 作者:行者123 更新时间:2023-11-30 17:44:29 24 4
gpt4 key购买 nike

我的作业目标(仅限 C,无 C#、CPP 等...)是从用户获取字符串,然后修剪矩阵以适合准确的数据。这是我的代码:

    void main(){
char** text=Q1();
int i;
printf("Lines entered:\n");
for(i=0;i<sizeof(text)/sizeof(char*);i++)
printf("%s\n",text[i]);
}

char** Q1(){
char OOM[]="Out of memory! exiting.";
char **buf=(char**)calloc(BUFFER,sizeof(char*)),**text;
int i,j;
if(buf==NULL){
printf(OOM);
exit(0);
}
for(i=0;i<BUFFER;i++){
buf[i]=(char*)calloc(BUFFER,sizeof(char));
if(buf[i]==NULL){
printf(OOM);
exit(0);
}
}
i=0;
do{
i++;
printf("Enter string #%d:\n",i);
gets(buf[i-1]);
}while(strlen(buf[i-1])>0 && i-1<BUFFER);
text=(char**)calloc(i,sizeof(char*));
if(text==NULL){
printf(OOM);
exit(0);
}
for(j=0;j<i;j++){
text[j]=(char*)calloc(strlen(buf[j]),sizeof(char));
if(text[j]==NULL){
printf(OOM);
exit(0);
}
strcpy(text[j],buf[j]);
}
free(buf);
return text;
}

现在我知道这可以通过 realloc 来完成(我还不太熟悉)。我想测试我的分配是否正常并打印我在文本中保存的字符串。最直观的方法是什么?提前致谢!

最佳答案

首先,这段代码:

for(i=0;i<sizeof(text)/sizeof(char*);i++)
printf("%s\n",text[i]);

不会工作。sizeof(text) 将返回指针的大小,因为 textchar**。你想要这样的东西:

for (int i=0; i<BUFFER && text[i]!=0; i++)
printf("%s\n",text[i]);

但这要求文本中的最后一个条目是空指针,因此您需要比所需的条目多分配 1 个条目并将其设置为 NULL。

否则,您需要找到其他方法来返回大小。

下一个:

i=0;
do{
i++;
printf("Enter string #%d:\n",i);
gets(buf[i-1]);
}while(strlen(buf[i-1])>0 && i-1<BUFFER);

i 将比条目数多 1。例如,如果用户第一次尝试按 ENTER,i 将设置为 1。

为什么不呢?

for (i=0; i<BUFFER; i++) {
printf("Enter string #%d:\n",i+1);
gets(buf[i]);
if (strlen(buf[i])­==0) {
break;
}
}

这样i就被设置为条目数。

假设您进行了上述更改:

text=(char**)calloc(i,sizeof(char*));

需要更改为:

text=(char**)calloc(i+1,sizeof(char*));  // Include an extra entry for the sentinel
text[i] = 0; // Add sentinel to indicate last entry

此外,在为字符串分配空间时,需要将大小加 1,以便为终止空字符留出空间。所以

text[j]=(char*)calloc(strlen(buf[j]),sizeof(char));

变成了

text[j]=(char*)calloc(strlen(buf[j])+1,sizeof(char));

你忘了将 buf[0] 释放到 buf[BUFFER-1]

对于真正的问题。我不确定您的方法对我来说是否合适。

关于c - 在C中打印不均匀(非二次)矩阵的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985258/

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