反向阵列(带argc和argv)和#x2B;如何打印
我是c语言的初学者,我想根据用户的输入,使用另一个动态分配的数组来切换argv数组的元素,但在将值(或字符)放入这个数组时,我遇到了一些问题,错误是:赋值从指针生成整数,而不使用cast[-Wint转换],我不明白这个问题。。。然后我想打印新的标签,但我不能,因为,我怎么做反向阵列(带argc和argv)和#x2B;如何打印,c,C,我是c语言的初学者,我想根据用户的输入,使用另一个动态分配的数组来切换argv数组的元素,但在将值(或字符)放入这个数组时,我遇到了一些问题,错误是:赋值从指针生成整数,而不使用cast[-Wint转换],我不明白这个问题。。。然后我想打印新的标签,但我不能,因为,我怎么做 #include <stdlib.h> #include <stdio.h> int main(int argc, char*argv[]) { /*TO BE CO
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char*argv[]) {
/*TO BE COMPLETED*/
int *tab =malloc(argc*sizeof(char));
int i = 0;
if (tab == NULL)
{
fprintf(stderr, "Not enough memory!\n");
exit (EXIT_FAILURE);
}
printf("tab = [");
for (i = argc; i > 1; i--)
{
int k = 0;
tab[k] = argv[i];
k +=1;
//printf(" %c," tab[k]);
}
printf(" ]");
free(tab);
return EXIT_SUCCESS;
}
#包括
#包括
int main(int argc,char*argv[]){
/*待完成*/
int*tab=malloc(argc*sizeof(char));
int i=0;
if(tab==NULL)
{
fprintf(stderr,“内存不足!\n”);
退出(退出失败);
}
printf(“tab=[”);
对于(i=argc;i>1;i--)
{
int k=0;
tab[k]=argv[i];
k+=1;
//printf(“%c”,制表符[k]);
}
printf(“]”);
免费(标签);
返回退出成功;
}
赋值从指针生成整数,无需强制转换[-Wint conversion]制表符[k]=argv[I]
您收到此警告是因为您已将tab
声明为typeint*
argv
是一个char*
数组,因此您将指针(同样,char*
分配给整数数组中的一个条目
我试图分配一个包含argc元素(输入)并返回输入的新选项卡,但返回的却是相反的
好的,但是你的代码实际上在做的是:
int *tab =malloc(argc*sizeof(char));
英语:分配一个大小为
argc*1
的块,并将其地址分配给一个指针,该指针被键入为指向整数的指针。听起来你的意思是创建一个字符指针数组,即malloc(argc*sizeof(char*))
,但如果您这样做,则选项卡
也应键入为char**
有一些问题和误解需要解决:
tab
应该声明为typechar**
而不是int*
argv
是一个类型为char**
的二维数组,因此tab
应该反映这一点。目前,您声明int*
但malloc
作为指向char
的内存块的指针,它是这是你犯错误的原因k
,您用来跟踪您在选项卡
数组中所处位置的索引,在反转循环的每次迭代中都会被重新声明并重置为0
,并且无法取得进展。它应该在循环范围内声明,而不是在循环块内声明argv[0]
是可执行文件的名称,因此您可能只想将argc-1
元素从1..argc-1
添加到选项卡
数组中。您可以相应地调整malloc
调用大小i=argc
超出了argv
的数组边界;将其指向i=argc-1
以访问argv
中的最后一个元素printf
将需要%s
格式字符串而不是%c
来打印argv
/选项卡的每个元素,因为元素可能不止一个字符
完整的错误消息是什么?我不明白您试图对
argc
执行的操作,它是一个整数,告诉您argv
中有多少字符串。为什么要为argc
字符分配块?它是:警告:赋值从指针生成整数,而不使用强制转换[-Wint conversion]选项卡[k]=argv[i];这不是完整的消息。它至少应该包括一个文件名和一个行号(任何错误消息中最重要的两个部分)。(与您的主要问题无关,但您应该在循环外声明k
,否则您将始终分配给选项卡[0]
。在循环中,您尝试访问argv[argc]
,它超出了最后一个参数。)然后我想打印tab的元素,我不知道在其中使用哪些标志printf@MathisFuentes%s
是字符串的printf格式说明符,我想这正是您想要的。printf格式字符串有很多选项,特别是对于数字类型,所以您应该随身携带。帮助没有com的初学者很好完整地解决问题,以便他们能够自己学习。谢谢,我遇到了另一个我也不理解的错误,我将尝试代码并从中学习:)我同意不解决问题让对方思考没问题,但我真的被卡住了,它确实帮助我看到了代码并分析了我的问题。谢谢你花了这么多时间!@Caleb你说得对,实际上添加副本会导致内存泄漏,而没有空闲,所以我将其删除;只需草图d这是一个没有ASAN的突发奇想。值得注意的是,新数组是一个参考数组。至于你的链接,你确定这是一个家庭作业问题吗?双方都有很多假设,即使这是家庭作业,我觉得我的答案显然“有助于学生学习”并且“符合他们的兴趣”。有一些解决方案提供了大量完成的代码,没有任何解释,我觉得这里不是这样。对于DV假设,我深表歉意。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
int i, j;
char **tab = malloc((argc - 1) * sizeof(*tab));
if (tab == NULL) {
fprintf(stderr, "Not enough memory!\n");
exit(EXIT_FAILURE);
}
for (i = 1, j = argc - 2; i < argc; i++, j--) {
tab[j] = argv[i];
}
printf("tab = [");
for (i = 0; i < argc - 1; i++) {
printf(" %s,", tab[i]);
}
puts(" ]");
free(tab);
return EXIT_SUCCESS;
}