中複製字符數組到另一個const字符數組我所試圖做的是一個字符串指向argv[1]
並將其複製到另一個數組,但我想這個新陣爲const。聲明
是否有聲明數組爲const並與argv[1]
在同一行的內容初始化的方法嗎?
我遇到的問題是我無法將其聲明爲const
,然後在下一行使用strcpy
或某些此類函數複製字符串。這是無效的。
什麼是最好的行動過程?
中複製字符數組到另一個const字符數組我所試圖做的是一個字符串指向argv[1]
並將其複製到另一個數組,但我想這個新陣爲const。聲明
是否有聲明數組爲const並與argv[1]
在同一行的內容初始化的方法嗎?
我遇到的問題是我無法將其聲明爲const
,然後在下一行使用strcpy
或某些此類函數複製字符串。這是無效的。
什麼是最好的行動過程?
你可以做這樣的事情:
#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中,您可以看到您的字符串已被編輯。
這一切都是有道理的,這是正確的解決方案。謝謝你的回答,我總是驚訝於這個地方有多麼有用。 – LTClipp
考慮你不想修改它(它是一個常量和所有),你甚至都不需要在一些地方複製:
(Basic代碼缺乏合理性檢查,如正確的參數數量和參數lenght)
const char *myPointer = NULL;
myPointer = argv[1];
現在myPointer指向argv[1]
,你的第一個參數,該方案與啓動。
因此,如果您啓動程序像myfolder/myexe.exe myArg
你myPointer
將指向一個字符數組與這些內容{'m','y','A','r','g','\0'}
如何指向const char,並將其指向'argv [1]'?除非你打算稍後修改argv [1] ... – Dmitri
這實際上是一個好主意。這可能是最好的解決方案。 – LTClipp