char数组赋值中的store字符串使得没有强制转换的指针生成整数

时间:2014-09-01 07:20:51

标签: char-pointer

#include <stdio.h>

  int main(void){
   char c[8];
   *c = "hello";
   printf("%s\n",*c);
   return 0;
   }

我最近在学习指针。上面的代码给了我一个错误 - 赋值从指针生成整数而没有强制转换[默认启用]。 我在SO上发布了关于此错误的一些帖子,但无法修复我的代码。 我将c声明为8个char的任何数组,c具有第一个元素的地址。所以,如果我做* c =&#34; hello&#34;,它将在一个字节中存储一个字符,并根据需要使用尽可能多的后续字节,用于&#34; hello&#34;。 请有人帮我确定问题并帮我解决问题。 标记

2 个答案:

答案 0 :(得分:1)

我将c声明为8个char的任何数组,c具有第一个元素的地址。 - 是的

所以,如果我做* c =“hello”,它将在一个字节中存储一个字符,并根据“hello”中的其他字符使用尽可能多的后续字节。 - 否。“hello”(指向某个静态字符串“hello”的指针)的值将被分配给* c(1byte)。 “hello”的值是指向字符串的指针,而不是字符串本身。

您需要使用strcpy将字符数组复制到另一个字符数组。

const char* hellostring = "hello";
char c[8];

*c = hellostring; //Cannot assign pointer to char
c[0] = hellostring; // Same as above
strcpy(c, hellostring); // OK

答案 1 :(得分:1)

#include <stdio.h>

   int main(void){
   char c[8];//creating an array of char
   /*
    *c stores the address of index 0 i.e. c[0].  
     Now, the next statement (*c = "hello";)
     is trying to assign a string to a char.
     actually if you'll read *c as "value at c"(with index 0), 
     it will be more clearer to you.
     to store "hello" to c, simply declare the char c[8] to char *c[8]; 
     i.e. you have  to make array of pointers 
    */
   *c = "hello";
   printf("%s\n",*c);
   return 0;
 }

希望它能帮助.. :)