помогите пожалуйста
нужно передать в массив 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);
}
Другие языки программирования и технологии
C передать строку 1 параметра в массив
Конечно, некорректна.
char s[] означает, что s - массив неопределенной длины. Такая запись возмножна, только если он сразу инициализируется; но вместо инициализации у тебя идет присвоение ссылки.
а правильно, строго говоря, так:
char *s; //объявляем s
s=(char *)calloc(strlen(argv[1])+1,sizeof(char)); //создаем массив по длине строки
strcpy(s,argv[1]); //копируем строку
в принципе, первые две строки можно заменить на
char s[100] - но только если ты твердо уверен, что больше 99 символов в строке не будет.
и, кстати, странно - чего это ты комментарии по-польски пишешь...
char s[] означает, что s - массив неопределенной длины. Такая запись возмножна, только если он сразу инициализируется; но вместо инициализации у тебя идет присвоение ссылки.
а правильно, строго говоря, так:
char *s; //объявляем s
s=(char *)calloc(strlen(argv[1])+1,sizeof(char)); //создаем массив по длине строки
strcpy(s,argv[1]); //копируем строку
в принципе, первые две строки можно заменить на
char s[100] - но только если ты твердо уверен, что больше 99 символов в строке не будет.
и, кстати, странно - чего это ты комментарии по-польски пишешь...
Что тебе мешает работать просто с этой строкой никуда ее не передавая:
#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. Строго говоря передается не строка, а указатель на первый символ строки.
#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. Строго говоря передается не строка, а указатель на первый символ строки.
Похожие вопросы
- Объясните пожалуйста, что означает эта строка WRITE('ВВЕДИTE ЭЛЕМЕНТ МАССИВА '); READLN(MAS[1])?
- Задача - описать класс "Массив" с параметрами: длина массива, указатель на первый элемент массива
- C++ Везде написано, что sizeof() с массивом в качестве аргумента возвращает полный размер. А в данной функции не так.
- VS/C++ разбиение строки из 10 слов.
- Помогите написать задачу по C++ Дана строка. найти в ней самое длинное слово-палиндром.
- 3 задачи по C++ про строки.
- Помогите испрвить код Переписать первые элементы каждой строки матрицы a(n*m), больше некоторого числа C, в массив b .
- Как передать функцию в качестве параметра другой функции на C++?
- как в C++ массив чисел преобразовать в строку
- c++, массивы, строки