2017-07-27 130 views
-5

我正在學習指針。這段代碼正在產生運行時錯誤。 我想插入字符串在字符數組中使用指針字符。爲什麼Strcpy函數不能使用指向數組的指針?

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char *a[10]; 
    strcpy(*a,"foo"); 
} 
+5

哪裏是你的指針'了'分配內存的代碼中使用? –

+1

編譯代碼時不會編譯尖叫嗎?你應該聽它。 – Gerhardh

回答

1

的char *一個[10]是指針數組爲char,你想要所以char a [10],這是

2

您已經聲明a爲10個指針數組char字符數組。 我想你的意思是聲明一個10個字符的數組。

char a[10]; 

更改聲明也意味着你需要調用更改爲strcpy

strcpy(a,"foo"); 

程序現在看起來是這樣的:

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[10]; 
    strcpy(a,"foo"); 
} 
2

爲什麼strcpy函數不使用指針指向數組?

此聲明

char *a[10]; 

指針不聲明爲數組。它是一個由char類型的對象組成的10個指針數組的聲明。

此外,此數組未被初始化,其元素具有不確定的值。

要聲明的指針類型的數組char[10]你應該寫

char (*a)[10]; 

,指針必須通過適當的陣列的地址,如果你要在功能strcpy使用它進行初始化。

看來你的意思是以下內容。

#include <stdio.h> 
#include <string.h> 

int main(void) 
{ 
    char s[10]; 
    char (*a)[10] = &s; 

    strcpy(*a, "foo"); 

    puts(s); 

    return 0; 
} 

程序輸出是

foo 

在這個程序中確實是有聲明的指針類型char[10]

char (*a)[10] = &s; 

和指針的字符數組被地址初始化數組s

而取消引用指針在功能strcpy

strcpy(*a, "foo"); 
相關問題