C программирование найти длину 2-мерного массива - PullRequest
1 голос
/ 01 февраля 2011

Моя программа получает аргументы командной строки с помощью argc и argv [].Мой вопрос, как я могу найти длину argv [1] [i].

Мой код, который получает длину argv []

int my_strlen(char input[]){ 
    int len = 0;
    while(input[len] != '\0'){
       ++len;
    }
    return len;
}

, но когда я пытаюсь найти argv [1] [len], я получаю подписанное значение, которое не является ни массивом, ни указателем: моя попытка

int my_strlen(char input[]){
   int len = 0;
   while((input[1][len] - '0') != '\0'){
      ++len;
   }
   return len;
}

ПОЛНЫЙ КОД:

#include <stdio.h>
#include <math.h>

int my_strlen(char input[]);

int main(int argc, char *argv[]){
int length = 0;
length = my_strlen(argv[1]);
long numberArr[length];
int i, j;

for(i = 0; i < length; i++){
  numberArr[i] = argv[1][i] - '0';
}

 return 0;
}

int my_strlen(char input[]){
 int len = 0;
 while((input[1][len] - '0') != '\0'){
  ++len;
 }
 return len;
}

Спасибо за любую помощь заранее!

Ответы [ 2 ]

3 голосов
/ 01 февраля 2011

Я думаю, вы не уверены в содержании argv. ОС передаст несколько строк ASCIIZ, таких как my_program с аргументами ala ...

my_program first second third

... похоже на следующее объявление в вашей программе ...

int argc = 4;
const char* argv[4] = { "my_program", "first", "second", "third" };

Следовательно, когда вы индексируете в argv[1][i], вы получаете i-й символ в строке «first». Это справедливо только для значений i между 0 (что дает 'f') и 5 ​​(что указывает на завершающий символ NUL '\ 0').

Итак, двумерного массива N * M нет, но есть массив указателей на (массив символов). Вы можете вызвать обычную функцию strlen(), как в strlen(argv[1]), чтобы узнать количество символов в каждом аргументе. Только argc сообщает вам общее количество элементов в argv.

Это помогает?

1 голос
/ 01 февраля 2011

В main вы передаете argv[1] в my_strlen.Это означает, что my_strlen просто получает нормальную одномерную строку.Это не нужно делать input[1][len], просто input[len].

...