我试图像这样得到我的char malloc的第一个字符:
char * str = malloc(sizeof(char)*100);
strcpy(str, op_mmin);
char *temp6=NULL;
strcpy(temp6,str[0]);
但是,我收到以下警告:
warning: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast [enabled by default]
strcpy(temp6,str[0]);
^
为什么我不能用str [0]来获取第一个字符?我也尝试使用普通数组(例如,不是malloc)来做到这一点,我得到了同样的错误。我如何得到这个malloc的第一个字符(或者如果你也知道那个数组)?
答案 0 :(得分:1)
因为str [0]是一个字符,而不是一个字符串。函数strcpy必须使用两个字符串(char *)作为参数。
要解决您的问题,您可以设置temp [0] = str [0];或使用sprintf函数,或使用strncpy函数
但是你必须先分配temp数组才能使用它。
答案 1 :(得分:1)
关于char *temp6=NULL;
在这里,你试图告诉编译器,“嘿!将temp6设置为指向char的指针,但不为它分配内存。”
如果您稍后执行strcpy(temp,str);
之类的操作,则会获得segmentation fault
,因为您正在尝试写入您不拥有的内存。
在你的情况下你没有看到分段错误到目前为止,编译器发现另一个错误,这是另一个回答者提到的,即在行中:
strcpy(temp6,str[0]);
编译器期望第二个参数为char *,但是你传递了char。
您必须先为指针分配内存,或将其指向数组。
也可以取消分配为指针分配的内存。
char* temp= malloc(sizeof(char) * 10) ; // allocating memory
temp='\0'; // In essence de-allocating the memory.
以下是一个完整的例子。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char* temp= malloc(sizeof(char) * 10) ; //allocating memory enough to store 10 chars
char* str="abcdefgh"; // play safely - always store less than 10 characters. Consider that \0 will be appended to the end.
strcpy(temp,str);
printf("Temp : %s\n",temp);
char* str1="ijklmnop";
strcpy(temp,str);
printf("Temp : %s\n",temp);
temp='\0'; // In essence deallocating the memory.
printf("Temp : %s\n",temp);
strcpy(temp,str);
printf("Temp : %s\n",temp);
}
会给你以下结果。
Temp : abcdefgh
Temp : abcdefgh
Temp : (null)
Segmentation fault (core dumped)
还要确保将free(temp6)
放在代码末尾以进行清理
记忆。
虽然这不能直接回答你的问题,但希望它会有用。
答案 2 :(得分:0)
我解决了以下问题:
char temp6 = op_mmin[0];
那就是它!现在temp6有op_mmin中的第一个char。谢谢大家的帮助。