首页 > 其他分享 >c语言中关于字符数组赋值问题

c语言中关于字符数组赋值问题

时间:2024-04-04 17:01:05浏览次数:20  
标签:字符 arr int scanf char 数组 字符串 赋值

一维数组

代码

#include<iostream>
#include<cstring>
#include<algorithm> 

using namespace std;

const int N=1010;
char str[N];
char st[N];
char s1[N];
char s2[N];

/*
abcde
abcde
abcde
abcde
*/ 

int main(){
	scanf("%s",&str+1);
	scanf("%s",st+1);
	scanf("%s",&s1);
	scanf("%s",s2);
	for(int i=0;i<=5;i++){
		cout<<i<<"\t";
	}
	cout<<endl;
	cout<<"str--------------------------------"<<endl;	
	for(int i=0;i<=5;i++){
		cout<<str[i]<<"\t";
	}
	cout<<endl;	
	cout<<"st---------------------------------"<<endl;	
	for(int i=0;i<=5;i++){
		cout<<st[i]<<"\t";
	}
	cout<<endl;
	cout<<"s1---------------------------------"<<endl;
	for(int i=0;i<=5;i++){
		cout<<s1[i]<<"\t";
	}
	cout<<endl;
	cout<<"s2---------------------------------"<<endl;
	for(int i=0;i<=5;i++){
		cout<<s2[i]<<"\t";
	}
	cout<<endl;
	return 0;
}

得到的输出

        可见str的赋值失败了...

结论

        在C语言中,scanf函数用于从标准输入(通常是键盘)读取输入数据。对于字符串,scanf使用%s格式说明符来读取字符串。

        当你使用scanf("%s", st+1);时,str+1表示从字符串st的第二个字符开始的地址。这种写法是合法的,因为C语言中,字符串实际上是一个字符数组,st+1指向该数组的第二个元素的地址。

        不需要使用&取地址符的原因是,数组名本身就代表了数组的起始地址,因此str+1已经是一个地址值,不需要再使用&取地址。

二维数组

对于二维字符数组的赋值,有几种常见的方法:

  • 使用字符串字面值进行初始化:
char arr[][6] = {"Hello", "World", "C语言"};
  • 使用scanf函数逐个读取字符串:
char arr[3][20];
for(int i=0; i<3; i++) {
    scanf("%s", arr[i]);
}
  • 使用strcpy函数复制字符串:
char arr[3][20];
char *temp[] = {"Hello", "World", "C语言"};
for(int i=0; i<3; i++) {
    strcpy(arr[i], temp[i]);
}
  • 使用fgets函数从文件或标准输入读取字符串(保留换行符):
char arr[3][20];
for(int i=0; i<3; i++) {
    fgets(arr[i], sizeof(arr[i]), stdin);
}
  • 使用gets函数从标准输入读取字符串(不建议使用,容易导致缓冲区溢出):
char arr[3][20];
for(int i=0; i<3; i++) {
    gets(arr[i]);
}

        无论使用哪种方式赋值,都需要注意字符串长度不要超过数组的大小,否则可能会导致缓冲区溢出和未定义的行为。同时,也要考虑是否需要为字符串留出额外的空间,以容纳字符串结束符'\0'。

标签:字符,arr,int,scanf,char,数组,字符串,赋值
From: https://blog.csdn.net/Hong_DWYJ/article/details/137377583

相关文章

  • c语言:模拟字符串拷贝功能(strcpy),面试题
    面试题:优化中的优化(10分满分)字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。运用函数模拟字符串拷贝:(5分)模拟字符串拷贝#include<stdio.h>voidmy_strcpy(char*dest,char*str){ while(*str!='\0') { *dest=*str; str++; dest++; } *dest......
  • 数组赋值
    1publicclassShuZhu{2publicstaticvoidmain(String[]args){3int[]a1={2,3,4,5,6,7,8};4int[]a2=a1;56for(inta3:a17){8System.out.println(a3);9}10System.o......
  • 代码随想录算法训练营第一天 | 数组 704.二分查找 27.移除元素
    leetcode704.二分查找题目704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。解题思路代码实现本题对自己的难点有大概的解题思路,但是代码实现有几个点写不出来1、怎么取......
  • 计算给定整数数组中,第i个元素表示从第i个位置开始按摩到最后一个位置能够获得的最大收
    算法:计算给定整数数组中,第i个元素表示从第i个位置开始按摩到最后一个位置能够获得的最大收益。解题思路:使用动态规划方法解决。代码示例:publicintmassage(Vector<Integer>nums){intn=nums.size();if(n<0){return0;}......
  • 4.7 数组的读取和写入,type指令和一些杂项
    4.7数组的读取和写入,type指令和一些杂项可以通过wordptr将db转为dw,然后按照dw的方式去存储数据1.段名也可以把其地址赋给变量assumecs:codesg,ds:data,ss:stackdatasegmentdb12,34dw12,34db'helloworld'dataendsstacksegmentdb10d......
  • MFC--wsprintf将一系列的字符和数值输入到缓冲区
    函数wsprintf()将一系列的字符和数值输入到缓冲区。输出缓冲区里的的值取决于格式说明符(即"%")。如果写入的是文字,此函数给写入的文字的末尾追加一个'\0'。函数的返回值是写入的长度,但不包括最后的'\0'。语法:intwsprintf(LPTSTRlpOut,//输出缓冲区,最大为1024字节LPCTSTR......
  • 柔性数组
    柔性数组(FlexibleArrayMember)是C语言中的一种特性,允许在结构体的末尾定义一个数组,但是这个数组的大小可以在运行时确定。柔性数组通常用于动态分配内存,特别是在需要保存可变数量元素的情况下非常有用。一般来说,柔性数组的定义方式如下所示:structflex_array{intleng......
  • 在排序数组中查找元素的第一个和最后一个位置
    34.在排序数组中查找元素的第一个和最后一个位置-力扣(LeetCode)题目描述给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂......
  • 翻转数组
    publicclassexample{ publicstaticvoidmain(String[]args){ intarr[]={1,2,3,4,5,6}; inttemp=0; intlen=arr.length; for(inti=0;i<len/2;i++){ temp=arr[len-1-i]; arr[len-1-i]=arr[i]; arr[i]=tem......
  • 将字符串转化为回文串,并记录方案
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#defineR(x)x=read()#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;inline......