聲明

2016-06-14 42 views
3

中複製字符數組到另一個const字符數組我所試圖做的是一個字符串指向argv[1]並將其複製到另一個數組,但我想這個新陣爲const。聲明

是否有聲明數組爲const並與argv[1]在同一行的內容初始化的方法嗎?

我遇到的問題是我無法將其聲明爲const,然後在下一行使用strcpy或某些此類函數複製字符串。這是無效的。

什麼是最好的行動過程?

+3

如何指向const char,並將其指向'argv [1]'?除非你打算稍後修改argv [1] ... – Dmitri

+0

這實際上是一個好主意。這可能是最好的解決方案。 – LTClipp

回答

7

你可以做這樣的事情:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    return 0; 
} 

利用的事實,論據[0]與*論點基本相同。 但要小心!

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    argument[2] = 'z'; //ERROR 
    printf("%s\n", argument); 

    return 0; 
} 

此以上會導致錯誤按預期方式。但...

int main(int argc, char *argv[]) 
{ 
    const char *argument = argv[1]; 
    printf("%s\n", argument); 

    argv[1][2] = 'z';  //same memory location but no errors 
    printf("%s\n", argv[1]); 

    printf("%s\n", argument); 

    return 0; 
} 

導致沒有錯誤....實際上在最後一個printf中,您可以看到您的字符串已被編輯。

+0

這一切都是有道理的,這是正確的解決方案。謝謝你的回答,我總是驚訝於這個地方有多麼有用。 – LTClipp

3

考慮你不想修改它(它是一個常量和所有),你甚至都不需要在一些地方複製:

(Basic代碼缺乏合理性檢查,如正確的參數數量和參數lenght)

const char *myPointer = NULL; 
myPointer = argv[1]; 

現在myPointer指向argv[1],你的第一個參數,該方案與啓動。

因此,如果您啓動程序像myfolder/myexe.exe myArgmyPointer將指向一個字符數組與這些內容{'m','y','A','r','g','\0'}