我希望通过获取命令行参数从字符串数组中找到最长的字符串。我可以接收命令行参数,但我的逻辑有什么问题?
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
int i;
char *c = argv[1];
int maxSize = strlen(argv[1]);
for(i=2;i<=argc;i++){
int len = strlen(argv[i]);
if(len>maxSize){
maxSize = len;
c = argv[i];
}
}
printf("Max length string : %s", c);
}
答案 0 :(得分:0)
您的循环正在运行数组外。
您似乎理解了argc和argv的含义,但您错过了argc是包含进程名称的输入参数的数量。
对于以下输入案例, 你将收到5为argc和最后一个参数字符串'flow',在argv [4]中找到。
a.out hello statck over flow
但是,您的代码将遇到argv [5],这不是argments的一部分,并且可能导致未定义的行为。
代码中的循环应该像
一样改变for(i=1; i<argc; i++)
{
}
答案 1 :(得分:0)
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]) {
if (argc == 1) {
printf("No arguments provided");
return 1;
}
int maxLength = 0;
int maxIndex = 0;
int i;
char* word;
for (i = 1; i < argc; i++) {
word = argv[i];
int length = strlen(word);
if (length > maxLength) {
maxLength = length;
maxIndex = i;
}
}
printf("Max length is %d for string: %s\n", maxLength, argv[maxIndex]);
return 0;
}
答案 2 :(得分:0)