我想使用以下代码,但不使用"[] []"索引数组,并用指针替换它
for (int i = 0; i < argc; i++) {
for (int j = 0; argv[i][j] != '\0'; j++) {
//code
}
}
Run Code Online (Sandbox Code Playgroud)
我知道你可以使用指针来遍历一个数组,但我不确定如何在第二个数组中使用未定义的长度,在这种情况下是来自输入的字符串.由于argv []的每个元素可以有不同的长度,我想确保我能正确读取字符并知道argv []的每个元素何时结束,然后下一个元素开始.
我希望它是这样的:(如果以下标题为main错误,请告诉我.)
int main(int argc, char **argv) {
for (int i = 0; i < argc; i++) {
while(argv != '\0') {
//code
*argv+1;
}
//to skip null character
argv+1;
}
}
Run Code Online (Sandbox Code Playgroud)
由于for循环允许任何类型的值,不一定是您的“循环索引”的整数,您的循环可以像这样重写:
for (char **a = argv ; a != argv+argc ; a++) {
for(char *p = *a ; *p != '\0' ; p++) {
// code uses *p instead of argv[i][j]
}
}
Run Code Online (Sandbox Code Playgroud)
内循环p用作循环变量,它随常规 递增p++,并用 进行检查*p != '\0'。循环条件可以缩短为*p,因此内部循环将如下所示:
for(char *p = *a ; *p ; p++)
Run Code Online (Sandbox Code Playgroud)
鉴于其中的最后一个元素argv是NULL,argc如果您真的不想创建索引,则无需对其进行索引或比较。
int main(int argc, char *argv[]) {
for (char **arg = argv; *arg; ++arg) { // for each arg
for (char *p = *arg; *p; ++p) { // for each character
process(*p);
}
}
}
Run Code Online (Sandbox Code Playgroud)
*arg将NULL位于参数列表的末尾,这是错误的。 *p将'\0'在每个字符串的末尾,这是错误的。
从N1256 5.1.2.2.1 / 2
如果声明了它们,则主函数的参数应遵循以下约束:
— argc的值应为非负数。
— argv [argc]应为空指针。
| 归档时间: |
|
| 查看次数: |
9629 次 |
| 最近记录: |