为什么Strcpy函数不能使用指向数组的指针?

问题描述:

我正在学习指针。这段代码正在产生运行时错误。 我想插入字符串在字符数组中使用指针字符。为什么Strcpy函数不能使用指向数组的指针?

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

哪里是你的指针'了'分配内存的代码中使用? –

+1

编译代码时不会编译尖叫吗?你应该听它。 – Gerhardh

的char *一个[10]是指针数组为char,你想要所以char a [10],这是

您已经声明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"); 
} 

为什么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");