精华内容
下载资源
问答
  • 2017-08-11 14:00:31

    今天在看结构体变量时发现一个问题:

    问题代码如下

    int main() {
        struct student{
            char c[20];
        }s1;
        s1.c="china";
        printf("%s",s1.c);
        return 0;
    }

    输出结果为空,不知道是为什么?

    经过网上的答案尽是如此:

    C语言只有在定义字符数组的时候才能用“=”来初始化变量,其它情况下是不能直接用“=”来为字符数组赋值的,要为字符数组赋值可以用string.h头文件中的strcpy函数来完成。
    例如:
    char a[10] = "123"; /*正确,在定义的时候初始化*/
    char a[10];
    a = "123"; /*错误,不能用“=”直接为字符数组赋值*/
    strcpy(a, "123"); /*正确,使用strcpy函数复制字符串*/
    所以要对game[0][0].cpart赋值应该用strcpy(game[0][0].cpart, "123");才对。注意要使用strcpy函数要用#include <string.h>包含string.h头文件。
    给C语言结构体中的char数组赋值有两种方式:


    1、在声明结构体变量时赋值:

    //#include "stdafx.h"//If the vc++6.0, with this line.
    #include "stdio.h"
    struct  stu{
         int  x;
         char  name[10];
    };
    int  main( void ){
         struct  stu s={8, "123" }; //这样初始化
         printf ( "%d %s\n" ,s.x,s.name);
         return  0;
    }
    2、向数组直接拷贝字符串:

    //#include "stdafx.h"//If the vc++6.0, with this line.
    #include "stdio.h"
    #include "string.h"
    struct  stu{
         int  x;
         char  name[10];
    };
    int  main( void ){
         struct  stu s;
         strcpy (s.name, "abcd" ); //向name拷贝字符串
         s.x=128;
         printf ( "%d %s\n" ,s.x,s.name);
         return  0;
    }

    至于为什么不能直接给字符数组赋值字符串呢?网上各大神说的是,因为在初始化字符数组时,数组的内存地址已经确定,不能再做修改。

    想要直接给数组赋值字符串除了在初始化时赋值,还可以通过两个函数,void *memcpy(void*dest, const void *src, size_t n);,strcpy(str1,str2)。

    个人的理解是:在初始化字符数组时,编译器会给字符数组首元素赋予初始地址。而后再另外给字符数组赋值字符串,此时字符数组已经具有地址,编译器就会以为是你要给字符数组某个元素赋值。所以说此时是可以给单个字符数组元素赋值单个字符的,但是不可以赋值字符串。

    更多相关内容
  • c语言二维数组如何定义字符串????急。。。二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小]; 例如:char c[3][10]; //定义了一个3行10列的二维字符数组c 由于该二维数组的每一行 c[0]、c[1]、c[2...

    C语言中二维字符数组应该怎样赋值?

    c语言二维数组如何定义字符串????急。。。

    二维字符数组的定义格式为:char 数组名[第一维大小][第二维大小]; 例如:char c[3][10]; //定义了一个3行10列的二维字符数组c 由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组。

    1c23e41d96d82df4d03ade34c42840ed.png

    1.用一个循环语句就可以了。例如: char *a[3]={"1","23","456"}; char b[10][10]; for(i=0;i=0)。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进

    c 语言 二维字符串数组赋值问题

    想给一个二维字符数组赋值, 但总告诉我类型不匹配: char name[3][20];c 字符串定义以后不可以 用= 直接赋值的 用函数 strcpy #include #include int main(void) { char name[3][20]; strcpy(name[0], "iris1"); strcpy(name[1], "iris2"); strcpy(name[2], "iris3"); }

    C语言中怎样定义一个字符型的二维数组赋值并输出啊?

    C语言中怎样定义一个字符型的二维数组赋值并输出啊?为什么总是报“arraystr[3][20]={"hello","world","hello world"} 3代表有三个字符串,20代表每个字符串的最大长度,/0不用加。

    跪CSS布局HTML小编今天和大家分享C语言中怎样把很多字符串存入二维数组中,并用#include int main() { char s1[10]="hello"; char s2[10]="world。"; char array[10][10]; int i,j; char *tmp; for(i=0;i

    c语言中怎样实现对二维数组元素进行赋值并输出。

    可以按照下面步骤进行定义二维数组并输出: 1 定义二维指针。 2 确定数组维数,即行数和列数。 3 申请行数个一维指针大小空间,并赋值给二维指针。 4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。 5 输入或赋值数据。

    展开全文
  • 2.数组)定义后再赋值字符串。此时要用拷贝函数strcpy( )。 3.直接指针赋值字符串。 4.先定义一个指针(也叫野指针,没有指向的空间),再赋值字符串。此时需要指针先malloc空间,让指针指向这个malloc...

    直接定义赋值都是没有问题的,正确的。但是数组,指针定义了之后再赋值则有规则。

    目录

    1.数组直接定义赋值字符串。 

    2.给(数组)定义后再赋值字符串。

    3.直接给指针赋值字符串。

    4.先声明一个指针,再赋值字符串


    1.数组可以直接定义赋值字符串。如char str[128] = "dasdasdasda"; 此时的访问可以用字符串的占位符%s ,也可以用数组的 for( ) 循环访问。 

    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        char str[128] = "dasdasdasda";     
    
        printf("%s\n",str);
        
        int i;
        for(i=0;i<strlen(str);i++){
    		 printf("%c\n",str[i]);
        }
    
    	system("pause");
    	return 0;
    }
    

    2.给(数组)定义后再赋值字符串。此时要用拷贝函数strcpy( )

    2.1错误做法: char str[128];

                            str  =  "abcdef"; 

    注意:不可以给数组名赋值字符串(不合法的)。因为:数组名 str 指向的地址是数组的首地址 str[0] ,这个值是固定的。而字符串"abcdef"也有它本来指向的空间。

    字符串的双引号做了3件事: 
                   1.申请了空间(在常量区),存放了字符串 
                   2. 在字符串尾加上了’/0’ 
                   3.返回地址

    2.2正确给(数组)定义后再赋值字符串做法,此时要用拷贝函数strcpy( ),代码如下:

    
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char str[128];
        strcpy(str,"正确赋值字符串"); 
    
        printf("%s\n",str);
    
    	system("pause");
    	return 0;
    }
    

    3.直接给指针赋值字符串。

    char *str = "abcdef";

    初始化可以直接用指针指向该字符串。

    因为字符串"abcdedf"有自己的空间,只是让指针str指向了这个空间。

    4.先定义一个指针(也叫野指针,没有指向的空间),再赋值字符串。

    此时需要给指针先malloc给空间,让指针指向这个malloc开辟的空间,再初始化memset

    4.1:这样赋值也是可以的,定义了一个指针,指针指向了字符串常量

            char *str;

            str = "abcdef";

    4.2:错误做法

              char *str;

              strcpy(str,"abcdef");

            此时的str是一个野指针,野指针没有指向的空间。不能往野指针里面放东西。

    4.3:正确做法,让指针指向一个malloc的空间,再初始化memset,代码如下。

    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int main()
    {
        char *str;
        str = (char *)malloc(128);
        memset(str,'\0',128);
      
        strcpy(str,"正确赋值字符串");
        puts(str);
    
    
    	system("pause");
    	return 0;
    }
    

     (摘录)初始化时,字符串常量 被编译器存放在了 常量区,空间的大小和位置都已经确定了,自然就可以把地址赋值给指针,了解了这个,就清楚知道为啥 有时候,需要先动态分配空间,并把空间地址赋值给某个指针,再通过这个指针才能存放字符串。

     

    展开全文
  • 1.字符串的拷贝API:strcpy() 原型:char *strcpy(char* dest,const char *src) - 第一个参数dest:目标函数 - 第二个参数src:原函数 char strDest[128] = {'\0'}; 第一种定义初始化数组 char *strSrc =...

    1.字符串的拷贝API:strcpy()

    不能给数组名赋值字符串的情况,要用strcpy,具体的请看下面

    因为数组名是常量,不能直接赋值字符串

    数组名是常量-详解,点击跳转

    字符串常量:
    1.与字符数组的关系: 在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。例如“char a[10]=“love”.”
    .
    2.与指针的关系: 在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符的指针”,例如:char *a = “123” ; a = “abc”;,*后者指向这些字符所存储的地址。
    .
    但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = “a”;就是错误的,报错结果:invalid conversion from 'const char’ to ‘char’。
    .
    例如:char a[10]=“love”,的意思就是用字符串“love”来初始化字符数组a的内存空间,而数组的首地址也就是“love”字符串的地址。

    	char strDest[128]= {'\0'};  		
      	strDest = "hello world";			错误的,不能将字符串赋值数组。要用strcpy  
        printf("%s\n",strDest);
    
    	char strDest[128];  		
      	strDest = "hello world";			错误的,不能将字符串赋值数组。要用strcpy  
        printf("%s\n",strDest);
    

    正确给数组赋值字符串:

     原型:char *strcpy(char* dest,const char *src)
     - 第一个参数dest:目标
     - 第二个参数src:源
    	
    	 
      	char strDest[128] = {'\0'};  		第一种定义初始化数组,平常数组
    	char *strSrc = "hello world";
        
        strcpy(strDest,strSrc);
        printf("复制字符串完毕:%s\n",strDest);
       	
    ===============================================================================
        char *strDest;                 		第二种定义初始化数组,用malloc(以下的都是以这个来讲)
        strDest = (char *)malloc(128);
        memset(strDest,'\0',128);  			此时的128换成sizeof(strDest)/sizeof(strDest[0] = 4不可以,
    							   			因为此时strDest是野指针,指针在windows中占4个字节
        char *strSrc = "hello world";		不能将字符串赋值数组。要用strcpy。错误情况:strSrc = "hello world";		
          
        strcpy(strDest,strSrc);
        printf("复制字符串完毕:%s\n",strDest);
    ===============================================================================    
    	memset(strDest,'\0',sizeof(strDest)/sizeof(strDest[0]));  	初始化,重置数组(注意细节)strcpy(strDest,"再一次调用strcpy :hello world");
        puts(strDest);
    

    2.字符串的拷贝API:strncpy()

    	原型:char *strncpy(char *destinin, char *source, int maxlen);
    	- 第一个参数dest:目标
     	- 第二个参数src:源
     	- 第三个参数src:最大长度,就是要拷贝几个
    
    	memset(strDest,'\0',128);  	初始化,重置数组。这里用sizeof(strDest)/sizeof(strDest[0])结果会出错(细节)
        strncpy(strDest,"TheLuk",3);
        puts(strDest);	
        - 输出的结果是:The
    
    展开全文
  • 字符串数组赋值

    2022-04-10 11:09:17
    /*给数组字符串*/ } 上面程序在编译时,遇到chars[30]这条语句时,编译程序会在内存的某处留出连续30个字节的区域, 并将第一个字节的地址赋s。当遇到strcpy( strcpy 为TurboC2.0的函数)时, 首先在目标文件的某...
  • C语言字符串数组赋值

    万次阅读 2019-09-13 21:16:15
    数组赋值有两种方式 一种是在定义是赋值: char book[] = {"the story of sitone"}; char author = "曹雪芹";//去掉花括号也可以 char k[5] = {'h','e','l','l','o','\0'}; 定义后在赋值就一般用strcpy,不能用=赋值...
  • 给字符数组赋值的方法

    千次阅读 2021-03-11 14:31:49
    /*给数组字符串*/...}上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留出连续30个字节的区域, 并将第一个字节的地址赋s。当遇到strcpy( strcpy 为Turbo C2.0的函数)时, 首先在目标文件的...
  • C语言字符串赋值给数组/char *

    千次阅读 2021-01-27 19:22:20
    字符串(c语言): 以“abcd”为例,解释...1. 字符串赋值给char * int main(int argc, const char *argv[]) { char *p1 = "hello"; printf("p1[0] = %c\n", *p1); printf("%s\n", p1); char *p2 = NULL; ...
  • 如何给给字符数组赋值

    万次阅读 2019-05-06 16:12:04
    如何给给字符数组赋值 如何一个一维数组赋值: 1、定义的时候直接赋值: char arr[10] = {“kitty”}; 1 这种写法也可以直接省略花括号,直接写成: char arr[10] = “kitty”; 1 2、初始化列表,把各个字符依次赋...
  • C 语言 char型数组赋值字符串

    千次阅读 2015-11-28 13:32:00
    char CharType[6]; // 定义一个 char 类型的数组。 strcpy(CharType,"0.001"); // 将字符串 “0.001” 赋值给CharType 数组。 itoa(i_value_flag, CharType); // 将int型变量,转换成字符串,...
  • c语言中如何给字符串数组赋值

    千次阅读 2021-05-19 09:52:24
    c语言中如何给字符串数组赋值1.问题这是我写的struct student{int x;char name[10];};void main(){student st;st.name= 这里能不能直接赋值 一个字符串 “123”;? 如果不用scranf()}2.原因st.name="123"; 非法,...
  • C语言二维数组字符串赋值

    千次阅读 2021-05-19 09:07:13
    今天用到了二维数组作为参数传递的程序,通过网上搜索,针对自己遇到的问题做个整理。1、在被调用函数的形参数组定义可以省略第一维的大小,第二维不可省略,如下:void fun(int a[5][20]); //合法void fun(int a[]...
  • 字符数组字符串(C语言)

    千次阅读 2019-12-13 18:30:24
    char m [ 100 ] ; strcpy ( m , "赋值给数组" ) ; 不过strcpy函数并没有给字符串检查长度,可能会导致数组溢出,请自己多加留意。
  • 在做一个网页重构成VUE的时候,有段代码是这样的 一直能打印出pics的值,...以上这篇vue 解决数组赋值无法渲染在页面的问题就是小编分享大家的全部内容了,希望能大家一个参考,也希望大家多多支持软件开发网。
  • C++中字符数组字符串 赋值问题

    千次阅读 2019-02-25 13:33:54
    问题:写一个函数将一个字符串按反序存放。...但字符数组可以给字符串变量赋值 如: char c[]="asd"; string c1=c; 求字符数组长度 引用—&gt;   常见的数组就是字符数组和整型数组,今天...
  • 直接上代码: #include"stdio.h" int main(){ char a[10]; for(int i = 0; i<10;...这样的赋值手法,是不正确的,是不规范的,是无法达到预期效果的。 #include"stdio.h" int main(){ char
  • 怎么这个数组赋值呢? 字符数组用字符串赋值的三种可行形式: 1、定义的时候直接用字符串赋值 char a[10]="hello"; 【注意】不能先定义再它赋值,如char a[10]; a[10]="hello";这样是错误的,一个字符怎么...
  • 字符串指针赋值给数组

    千次阅读 2018-08-08 20:57:57
    比如 char *p=”sdflkjasljfsjlsdfsa”;...将p赋p1 (1)strcpy(p1,p); (2)char *src=”helloworld”; char des[100]={0}; memcpy(des,src,strlen(src)+1); //void *memcpy(void *str1, const...
  • 字符数组与字符串赋值问题 (1)数组不能直接给数组赋值 (2)指针不能直接给数组赋值 根本原因: 数组名在内存中是一个类似于常量的存在,可以理解为const,在编译的时候就已经分配的储存位置,在需要使用到数组...
  • 如何给字符串数组赋值

    万次阅读 多人点赞 2015-06-22 22:19:57
    怎么这个数组赋值呢? 1、定义的时候直接用字符串赋值 char a[10]="hello"; 注意:不能先定义再它赋值,如char a[10]; a[10]="hello";这样是错误的! 2、对数组中字符逐个赋值 char a[10]={'h','e','l','l'...
  • 1、我们可以在定义的时候赋值 char *p = “hello” char pf[20] = “word” 注意:不能先定义再赋值,如char a[10]; a[10]=“hello”;这样是错误的! 2、定义之后我们可以利用strcpy进行赋值 例如;char ...
  • 实际操作中,我们很多时候要输入数组元素的值,我们只能定义数组类型和大小(通常往大了定,保证输入够用),比如`int a[100]`。而往往课本上很多时候都是定义数组时就进行了初始化,某天下午我突然想理清一下两者的差别...
  • C语言怎样给字符数组赋值

    千次阅读 2021-09-11 15:43:53
    1、数组在定义时, ...2、单字符赋值 可通过数组下标方式或指针方式,引用数组元素,进行赋值。 例子: char a[10]; char ch=‘a’; for( i=0;i<10;i++ ) a[i]=ch+i ; //可通过数组下标引用数组元素,完成赋
  • unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms.../// 2:数组字符串指针都可直接赋值给字符串 /// 3:字符串赋值给数据需要拷贝 /// /// end.  
  • 1.C语言基础-给字符数组赋值

    千次阅读 2021-10-05 20:16:20
    定义字符数组定义时直接初始化,下面例子中直接将字符串123456的首地址赋值给a char a[6]=“123456”; 需要注意的是,在定义之后,不可以在对a数组使用字符串直接初始化,如下 char a[6]; a = "123456" a是一个静态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 460,721
精华内容 184,288
关键字:

如何给数组赋值字符串