[英]array of pointers to strings
在C編程中,我們無法使用scanf()函數獲取值到指針數組
int main()
{
char *names[6];
int loop;
scanf("%s",names[1]);
printftf("\n%s",names[1]);
}
它正在工作,當我把輸入作為程序,我認為它是存儲輸入,但它正確打印輸出作為給定的輸入。之后,它給出了分段錯誤...但是當我在循環中做同樣的獲得6個字符
int main()
{
char *names[6];
int loop;
for(loop=0;loop<6;loop++)
scanf("%s",names[1]);
for(loop=0;loop<6;loop++)
printf("\n%s",names[1]);
}
它不工作請給我答案...
問題是您沒有為這些名稱分配任何空間。 如果要將其與scanf
一起使用,則需要初始化數組中的每個元素。
char* names[6];
for( int i = 0; i < 6; ++i )
names[i] = malloc( 256 * sizeof *names[i] ); // or some other max value
scanf( "%s", names[1] );
否則這些指針將指向您內存中的任何位置,並且嘗試讀取/寫入這些位置最終將導致分段錯誤 。
在你的代碼names
是一個由6個指針組成的數組。 現在,每個指針都可以存儲新字符串的起始點(第一個字符的地址)。 這意味着您可以在names
變量中存儲6個不同字符串的起始地址。
但是當你使用一個循環來初始化每個字符串時,你需要告訴機器每個字符串可能的長度,以便它可以分配一個連續的地址塊,其第一個地址可以存儲在你的指針中以引用你的串。 因此,您必須分配一個您認為足以存儲字符串的特定大小(例如:256字節,1字節為1個字符)。 如果沒有這個,機器不知道在哪里存儲字符串的所有字節,並由於非法內存訪問而引發分段錯誤。
因此,為此,必須為每個6個指針分配一些空間來存儲字符串。 這將使用malloc()
在您的循環中完成。 基於@ K-ballo的代碼:
char* names[6];
int max_length = 256; // The maximum length you expect
for( int i = 0; i < 6; ++i )
names[i] = malloc( max_length * sizeof(char) ); // allocates max_length number of bytes
scanf( "%s", names[1] );
所以現在你基本上有6個不同的max_length
連續字符地址塊,每個地址都由names[i]
引用。 當你執行scanf()
它從標准輸入中讀取字節,然后將這些字節放入由名稱[1]引用的內存中的這些分配字節中。
我在開始時很難理解這一切,所以只是想一個精心的解釋會有所幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.