2016-04-03 22 views
-1

Hey çocuklar dize değişmezlerinin adreslerini ve komut satırı argümanlarının başlangıç ​​ve bitişini yazdırmaya çalışıyorum.Dize değişmezleri ve komut argüman argümanlarının adresi

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) 
} 

benim araştırma ve değişmez bir dize adresini almak gibi ive duydum cevaplar izin verilmez mi ... Bu doğru mu? Bununla ne demek istiyorlar? Dize değişmezlerinin bir adresi yok mu? Lütfen bana komut satırı argümanlarının başlangıç ​​ve bitiş adreslerini nasıl alacağımı gösterin. Zaman ayırdığınız için teşekkür ederiz.

+1

"Bir dizenin adresinin alınması gibi yanıtların duyulmasına izin verilmiyor" - * nerede duydunuz? o? ** Söz konusu adreslere ** yazılması yasaktır. Bu adresleri salt okunur şekilde kullanmak, aksi takdirde onları bir “const char *” (örneğin, 's% s' belirteci ile hazırlanmış printf' gibi) bekleyen herhangi bir işleve göndermek mümkün olmaz. Adreslerini kullanamazsan değersiz olurlar. – WhozCraig

+0

buradan http://stackoverflow.com/a/12601183/859385 – user859385

+1

Kullanıcı6146524 ile ilgili misiniz? Bakınız: http://stackoverflow.com/questions/36368780/are-we-able-to-print-out-the-address-for-string-literal –

cevap

-1

Bir dize dosyasının değerini alabilirsin. Aşağıdaki kod, özellikle ana satırdan dönmeden önce bir satır var ...

#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

Bunun görünüşünden, değişken testinin adresini alınız. Dize değişmezi değil. Eğer Yanlışsam beni düzelt. – user859385

+0

'argv [1]' dizenin ilk karakterinin adresidir. İşaretçi değeri olarak yazdırmak istediğiniz şey budur. '& argv [1]' argv dizisinin adresidir - tamamen farklı. – selbie

+0

'argv [argc]' en iyi tanımsızdır. – selbie

İlgili konular