如何在C中获取字符串的第一个字符

时间:2015-11-28 05:15:10

标签: c arrays malloc

我试图像这样得到我的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的第一个字符(或者如果你也知道那个数组)?

3 个答案:

答案 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。谢谢大家的帮助。