Другие языки программирования и технологии

C передать строку 1 параметра в массив

помогите пожалуйста

нужно передать в массив s строку 1 параметра чтобы потом с ней работать
но эта запись некорректна

char s[]=argv[1];

потом я хотел провести следующие манипуляции с ней

for (int i=0;s!='\0';i++){

if (isdigit(s)){
sum=sum*10; ///vytvarime z neho cislo
sum=sum+(s-'0');

}
}
return sum;
// здесь хочу вернуть -1 если не было прочтено число но это у меня сейчас тоже некорректно
else{
return (-1);
}
Конечно, некорректна.
char s[] означает, что s - массив неопределенной длины. Такая запись возмножна, только если он сразу инициализируется; но вместо инициализации у тебя идет присвоение ссылки.
а правильно, строго говоря, так:
char *s; //объявляем s
s=(char *)calloc(strlen(argv[1])+1,sizeof(char)); //создаем массив по длине строки
strcpy(s,argv[1]); //копируем строку

в принципе, первые две строки можно заменить на
char s[100] - но только если ты твердо уверен, что больше 99 символов в строке не будет.

и, кстати, странно - чего это ты комментарии по-польски пишешь...
Виктор Я
Виктор Я
65 523
Лучший ответ
Что тебе мешает работать просто с этой строкой никуда ее не передавая:

#include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[]) {
    int c;
    for (c = 1; c < argc; ++c) {
        int n = 0;
        char *p = argv[c];
        while (*p && n != -1) {
            n = isdigit(*p) ? n * 10 + *p - '0' : -1;
            ++p;
        }
        if (n != -1) printf("%d\n", n);
    }
    return 0;
}

Распечатает все числа >= 0 из аргументов командной строки, и игнорирует остальное.

Используя стандартную функцию:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int c;
    for (c = 1; c < argc; ++c) {
        int n = 0;
        char *e;
        n = strtol(argv[c], &e, 10);
        if (*e == '\0') printf("%d\n", n);
    }
    return 0;
}

Этот пример понимает и отрицательные числа. Как видишь, очередная строка из массива аргументов спокойно передается в функцию strtol. Строго говоря передается не строка, а указатель на первый символ строки.
Алмас Тлеулиев
Алмас Тлеулиев
69 129