這裡蒐索程式師資訊,查找有用的技術資料
当前位置:首页 » 编程语言 » c语言未定义长短的字符串
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言未定义长短的字符串

发布时间: 2022-04-07 14:47:04

‘壹’ c语言中的字符串长度问题

逻辑上的是10,内存存储的是11

‘贰’ 在c语言中如何输入长度不确定的字符串

你可以这样做:

//文件名: array01.cpp
#include<iostream>
using namespace std;

int main()
{
int len;
cin>>len;
//用指针p指向new动态分配的长度为len*sizeof(int)的内存空间
int *p=new int[len];
...........
delete[] p;
return 0;
}

注意int *p=new int[len];这一句,你不能这样做:
int p[len];
C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行:
int p[]=new int[len];
编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len];

array01.cpp实现了一个变长的一维数组,但是要养成一个好习惯,就是注意要注销指针p,使程序释放用new开辟的内存空间。

不过,如果你能够知道字符串的最大长度的话,最简单的办法就是直接将数组定义为最大长度。

‘叁’ C语言字符串的长度和大小的几个问题

字符串以'\0'表示结束,"he\0llo" \0字符中就结束了,长度为2
"he\\0llo" ,双引号字符串自动加上'\0'结束符,\\表示'\'字符共有'h' ,'e','\','0','l','l' ,'o'七个字符,长度为7
ch1[]={'h','e','l','l','o'} 不会自动加上'\0',测试长度时直到遇到内存中第一个’\0'结束,长度不固定,如果重新编译程序运行长度就不一定是11

‘肆’ c语言 字符串定义长度问题

这个你就要去仔细温习一下你的课本了,字符串的话,它都是以‘\0’作为结尾的,所以你的“S”其实S后面还有一个‘\0’,所以你的str[1]少了,不过你要是这样初始化就可以str[1]={'S'},这样就是数组的初始化方式,就不会错了。

‘伍’ C语言如何定于未知长度的字符串

用动态申请内存的方法可以解决这个问题,有两种措施可以考虑:

  1. 设置一个循环,先动态申请一个较小的空间比如10字节,然后输入字符;当输入满时另外申请一个20字节的空间,把已输入的10个字符拷贝过来,释放掉10个字节的空间。然后向20个字节的空间里接着输入字符,写满时再申请一个30字符的空间……如此反复,直到输入' '时结束。

  2. 先动态申请一个较大的空间,如65535字节,直接向里输入字符,输入结束后测出长度,按实际需要另外申请一个空间把字符串拷贝过来,释放原来的空间。

措施1比较切合题意,但时效差,空间也不省(最后一瞬需要近二倍的空间)。措施2显得更有实际意义,因为“无限”的长度肯定是不存在的,所以取一个“够用”的大小临时用一下是可取的。下面提供措施2的参考代码:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#defineN65535
char*mygets(char*p){
char*ptmp;
if((ptmp=(char*)malloc(N))==NULL){//申请一个较大的临时用空间
printf("Applicationmemoryfailure... ");
exit(0);
}
gets(ptmp);//向临时空间直接输入字符串
if((p=(char*)malloc(strlen(ptmp)+1))==NULL){//按实际需要申请空间
printf("Applicationmemoryfailure... ");
exit(0);
}
strcpy(p,ptmp);//把字符串拷贝所需大小的空间里
free(ptmp);//释放临时空间
returnp;
}
intmain(void){
char*str=NULL;
printf("Inputastring... str=");
str=mygets(str);
printf("%s ",str);
free(str);
return0;
}

‘陆’ C语言“字符串的长度”有关一简单问题!

这个 c语言有自己的语法: \ddd 就是反斜杠后面有三位八进制数时当做转义字符看待,

就像补充题: 第一个字符串长度是5 \0 是字符串结束的标志,
第二个字符串长度也是5, \04 后面的a 不是十进制数字所以不会当做转义字符 , 而把\0 当做了字符串结束字符 且 \0 占一个长度

‘柒’ C语言关于字符串长度的问题

'16'是一个有效的字符
'18'不是一个有效的字符,因为8进制数中不能含有8
所以18等同于'1'和'8'

所以

charstr[]="La16ef";
//等同于
charstr[]={'L','a','16','e','f',''};//6个字符
charstr[]="La16ef";
//等同于
charstr[]={'L','a','1','8','e','f',''};//7个字符

‘捌’ c语言 怎么样设定输入字符串的长短,过长或过短都不合法

头文件 string.h 里面有个函数 strlen 用于求字符串的长度,你可以设定一个定长的缓存区,
如 #define Buffer_Size 255,然后定义一个字符数组 char str[Buffer_Size];
当然你也可以使用动态字符数组,如char *str。

‘玖’ c语言中字符串长度的问题

1 有错误啊。引号不配对,改为下面,则长度为15。
char *s="\\\"name\\address\n";

2 "\\\"name\\address\n"由下面15个字符构成。
\\
\"
n
a
m
e
\\
a
d
d
r
e
s
s
\n

‘拾’ C语言 输入一个没有长度限制的字符串数组

两种办法,设一个空数组并且初始化为空char ch[]="",或者用指针char *ch,然后gets(ch)就可以了