#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
const char* hello = "Hello, World!";
char *str = malloc(14 * sizeof(char));
for (int i = 0; i < 14; i++) {
strcpy(str[i],hello[i]);
}
str[14]='\0';
printf("%s\n", str);
return 0;
}
编制警告:
warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion] note: expected 'char *' but argument is of type 'char' warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]
str也是一个指针,也问好,发生了什么?
答案 0 :(得分:5)
你做错了:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main() {
const char* hello = "Hello, World!";
char *str = malloc(strlen(hello)+1);
strcpy(str,hello);
printf("%s\n", str);
free(str);
return 0;
}
说明:
strcpy
对指针进行操作,两者都是写入和读取的起始位置,因此您必须传递这些,而不是字符。您的阅读位置为hello
,您的写入位置为str
。然后strcpy
循环,直到找到一个0
字符(包括在内)来停止复制,因此你的循环是不必要的。最后一件事是你必须释放分配的内存。 sizeof(char)
也没有意义:它总是1。
答案 1 :(得分:1)
这里的问题是你试图将C字符串用作字符数组,这当然是允许的,但它与使用它们作为指针到 null终止的行为不同字符串。执行hello[0]
计算字符串的第一个字符,这通常是一个8位整数。 char
是一个值,它不对应于内存地址。
你想要的正确陈述是
strcpy(str, hello);
作为参考,如果你想从字符串中的某个点开始获取一个字符串,你可以这样做
strcpy(str, hello + 1);
对指针执行加法求值为指针,该指针是内存中前进的n个地址。
答案 2 :(得分:0)
Date # Value
20180514 # 3
20180514 # -1
20180514 # -1
20180513 # 2
20180513 # 5
20180513 # -1
的定义需要两个strcpy
指针,而不是char
,str[]
数组。
hello[]