我正在学习C。我编写了代码,错误是“传递'strcpy'的参数1使指针从整数开始而没有强制转换”。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct humans{
sname[20];
}human;
int main(){
human *person=(human *)malloc(sizeof(human)*1);
int i,k,z;
for(i=0;i<5;i++){
person=(human *)realloc(person,sizeof(human)*(i+1));
strcpy(*person[i].sname , "john");
}
for(i=0;i<5;i++){
printf("%s",*person[i].sname);
}
return 0;
}
我想使用malloc / realloc。
答案 0 :(得分:0)
如果您有*person[i].sname
,则需要person[i].sname
。将*
放在其前面时,将迫使该数组衰减到指向其第一个元素的指针,该指针在取消引用后将为您提供第一个元素的值。
也:
person=(human *)realloc(person,sizeof(human)*1);
此1
应该是i + 1
。
答案 1 :(得分:0)
我已修复您程序中的直接问题。 不过,更深层的是如何获得所需的指针。
array[4]
获取第4个元素的值。
array
获取指向第一个元素的指针
&array[4]
获取指向第四个元素的指针
array + 4
获取指向第四个元素的指针
*(array + 4)
获取第四个元素的值
*array[4]
获取值,将其视为指针,然后尝试从指针目标中获取值-这将需要额外的摆弄才能说服编译器为哪种类型。在大多数情况下,这可能毫无意义。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct humans {
char sname[20];
}human;
void MyStrCpy(char * dst, int dst_n, char * src, int src_n)
{
for (int n = 0; n < dst_n && n < src_n; ++n)
{
dst[n] = src[n];
if (src[n] == 0) break;
}
dst[dst_n] = 0;
}
int main() {
human *person = (human *)malloc(sizeof(human) * 1);
int i, k, z;
for (i = 0; i<5; i++) {
person = (human *)realloc(person, sizeof(human)*(i + 1));
//I replace strcpy so it compiles on my machine
MyStrCpy(person[i].sname, 20, "john", 5);
person[i].sname[20] = 0;
}
for (i = 0; i<5; i++) {
printf("%s\n", person[i].sname);
}
return 0;
}