#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
int size_to_alloc = sizeof(char*) * 1;
char** p = (char**) malloc(size_to_alloc);
p[0] = (char*) malloc (sizeof(char) * 10);
strcpy("hello", p[0]);
printf("%s\n", p[0]);
}
我显然缺少一些非常基本但却无法弄清楚的东西。
答案 0 :(得分:1)
strcpy()
函数的参数不匹配。
根据man page char *strcpy(char *dest, const char *src);
因此,strcpy()
来电必须为strcpy(p[0], "hello");
答案 1 :(得分:0)
只需对 strcpy 功能做一些小改动: char *strcpy(char *dest, const char *src)
。
dest :目标数组
src :要复制的字符串。
喜欢:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
int size_to_alloc = sizeof(char*) * 1;
char** p = (char**) malloc(size_to_alloc);
p[0] = (char*) malloc (sizeof(char) * 10);
strcpy(p[0],"Hello"); /* change */
printf("%s\n", p[0]);
}
输出你好
答案 2 :(得分:0)
请阅读strcpy()
的{{3}}。它说
char *strcpy(char *dest, const char *src);
所以,你需要将第一个参数作为目的地(又名复制到),第二个 >一个作为来源(又名来自的复制品)。
在您的情况下,"hello"
已作为副本提供给地址,"hello"
是字符串文字,尝试将任何内容复制到其中(即修改string literal)将导致man page,这会导致分段错误。
解决方案:交换函数调用的参数。
答案 3 :(得分:0)
strcpy
以相反的顺序获取其参数:destination first,source second。尝试:
strcpy(p[0], "hello");