2016-04-03 3 views
-1

Привет, ребята, я пытаюсь распечатать адреса строковых литералов и начало и конец аргументов командной строки.Адрес строковых литералов и аргументов командной строки

int main(int argc, char *argv[]) { 
    printf("Address of argc: %p\n", (void*)&argc); //Is this how u find the address of argc? 
    //How to find out the start and end of command line arguments? 
    printf("Start of argv: %p\n", (void*)argv); //Like this? I am not sure... 

    char* strLiteral = "Hello world"; 
    //how to find the address of "Hello world"? (Address of string literal) 
} 

Я сделал мое исследование и Ive слышал ответы, как принимать адрес строкового литерала не допускаются ... Правда ли это? Что они подразумевают под этим? Строковые литералы не имеют адреса? Пожалуйста, покажите мне, как получить начальный и конечный адреса аргументов командной строки. Спасибо, что нашли время.

+1

«Я слышал, что ответы, такие как обращение к строковому литералу, не допускаются» - * где * вы слышали что? ** Написание ** в указанные адреса не допускается. Используя эти адреса в режиме «только для чтения», в противном случае было бы невозможно отправить их почти любой функции, ожидающей «const char *» (например, 'printf', загружаемый с помощью спецификатора'% s', например). Они были бы бесполезны, если бы вы не могли использовать их адреса. – WhozCraig

+0

отсюда http://stackoverflow.com/a/12601183/859385 – user859385

+1

Вы связано с пользователем6146524? См. Http://stackoverflow.com/questions/36368780/are-we-able-to-print-out-the-address-for-string-literal –

ответ

-1

Вы можете получить адрес строкового литерала. Посмотрите на следующий код, в частности на строку перед возвратом из основного ...

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

int main(const int argc, char *argv[]) { 
    assert(argc > 1); 
    printf("argc == %d &argc == %p\n", argc, &argc); 
    printf("argv[0] == %s &argv[0] == %p\n", argv[0], &argv[0]); 
    printf("argv[1] == %s &argv[1] == %p\n", argv[1], &argv[1]); 
    const char *test  = "You can take the address of this"; 
    printf("test == %s  &test == %p\n", test, &test); 
    printf("*address of string literal == %p\n", &"address of string literal"); 
    return 0; 
} 
+4

От взглядов этого, ure принимая адрес переменного теста. Не строковый литерал. Исправьте меня, если я ошибаюсь. – user859385

+0

'argv [1]' - адрес первого символа строки. Вероятно, это то, что вы хотите напечатать в качестве значения указателя. '& argv [1]' - это адрес в массив argv - совершенно другой. – selbie

+0

'argv [argc]' в лучшем случае не определено. – selbie