第1个回答 推荐于2018-04-23
如果提取指定长度的字符串有专门的函数:strncpy(*s1,*s2,n);
如果提取字符串中从n开始的m个字符,程序如下:
#include<stdio.h>
#include<string.h>
void main()
{
unsigned int i,j,m,n;
char s1[80],s2[80];
printf("请输入一个字符串以回车键结束:\n");
gets(s1);
printf("请输入子串的起始位置和长度:");
scanf("%d%d",&n,&m);
if(n>0&&n<=strlen(s1))
{
if (m>0&&n+m<=strlen(s1)+1)
{
for(i=n-1,j=0;s1[i]&&i<n+m-1;i++,j++)
s2[j]=s1[i];
s2[j]='\0';
puts(s2);
}
else
printf("长度超出范围!\n");
else
printf("起始位置超出范围!\n");
}
}本回答被网友采纳
第2个回答 推荐于2017-09-03
可以用strncpy()函数
#include <string.h>
char sub[20];
strncpy(sub,string+12,13)
/*将string中从string[12]开始的13个数字复制到sub中*/本回答被提问者采纳
第3个回答 2018-05-23
#include <stdio.h>
int main()
{
int i, j, length;
char a[] ="hello world";
int from, num;
scanf("%d",&from); //截取开始的字符下标
scanf("%d",&num); //共截取的字符数
char b[num];
for (length = 0; a[length]!= '\0'; length++){}
if (from>=0)
if (from+num <= length ){
i = from; j=0;
while ( j<num){
b[j] = a[i];
printf("%c",b[j]);
j++; i++;}
}return 0;
}
#include <stdio.h>
int main(){
int i, j, length;
char a[] ="hello world";
int from, num;
scanf("%d",&from); //截取开始的字符下标
scanf("%d",&num); //共截取的字符数
char b[num];
for (length = 0; a[length]!= '\0'; length++){}
if (from>=0)
if (from+num <= length ){
i = from; j=0;
while ( j<num){
b[j] = a[i];
printf("%c",b[j]);
j++; i++;}
}return 0;
}
第4个回答 2018-04-23
C语言中想把一个数据分块,可以在读取数据的时候进行分块储存,不要整体读入之后,再进行分块。
如果数据是其他方式导入的,那只能通过先储存到硬盘,再读到内存,通过文件指针的移动,依次分块读入。
因为,数据存储是用整块内存存储的,不能直接将内存(即数据)进行分块,memcpy也只能获取数据前边一部分。