АС
Адиль Саалиевич

printf("%s\n", **argv); // ожидался вывод полного имени

Помогите разобраться в чём я не прав. Просто вопрос фундаментальный и хотелось разобраться в нем досконально. Следующий код в VS 2013 компилируется, но при запуске выдаёт ошибку. #include "stdafx.h"#include

int main(int argc, char* argv[])

{

printf("%s\n", **argv); // ожидался вывод полного имени

return 0;

}

Рассуждения такие. Если в функцию main передаётся указатель на массив указателей т. е.
это указатель на указатель, то первое раскрытие ссылки *(argv + 0) даёт указатель на строку с первым параметром
командной строки, а второе раскрытие ссылки **(argv + 0) даёт собственно эту строку L

ВК
Владимир Краюшкин

Насколько я помню язык C, %s выводит текстовую строку, которая в памяти представлена как массив байтов, заканчивающийся 0х00.
В твоем случае char* argv[] - это, по сути, массив строк.
Выражение **argv - это переменная типа char (один символ) , которая копируется (!!!) в стек аргументов функции printf и нет абсолютно никакой гарантии, что в этом стеке после кода символа последует 0х00 (маркер завершения строки).

ОК
Оксана Кунцевич

Оно даст символ (char). Проверьте в отладке.
А вам надо *argv либо argv[0].

Ир
Ирина

for( int i = 0; i < argc; i++ )
printf( "arg%d = %s\n", i, argv[i] );

Похожие вопросы
Ключевое слово printf и scanf
C++ argv[] вывод значения аргумента
решите уравнение n + S(n) = 2013, где S(n) сумма цифр числа n
Написать функцию вычисления суммы ряда s=s(1)+…+s(n), где s(n)=(-1)^n x^(2n-1)/(2n+1) с точностью до eps=0.001.
c++ printf ("%d \ЕЕЕЕ", переменная) на что надо заменить ЕЕЕЕ, чтобы строка чистилась ( \n - перенос строки)??
Проблемы с выводом ссилки из БД printf
В чём ошибка? Язык Си printf("Welcome to C!\n");}. /* Программа */ main() { printf("Welcome to C!\n"); }
C++. Как в операторе вывода сout выделить место для вывода числа? По типу printf("%7.2")
ПОМОГИТЕ! КАКАЯ ЗДЕСЬ ОШИБКА ? #include main () { printf("hello, "); printf("world"); printf("\n"); }
Описать процедуру SumDigit(N,S)