69,382
社区成员
发帖
与我相关
我的任务
分享
/**************************
2010.01.13
版本 V0.1
用途:输入一个字符串,并转化为数组
*****************************/
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
int *zifu_shuzu(int length,char *zifu);
int main(void)
{
char *str;
int *shuzu;
int length;
int i;
printf("输入要转化的数字:\n");
scanf("%s",str);
length=strlen(str);
shuzu=zifu_shuzu(length,str);//程序执行到这里就会崩溃
for (i=0; i<length;i++)
printf("shuzu[%d]=%d \n",i,shuzu[i]);
if(shuzu!=NULL)
{
free(shuzu);
shuzu=NULL;
}
free(shuzu);
return 0;
}
//将一个字符串转化成十进制数表示的数组
int *zifu_shuzu(int length,char *zifu)
{
int i=0;
int *shuzu=(int *)malloc(sizeof(int)*length);//感觉好像是这里出问题了
for (i=0;i<length;i++)
{
if (zifu[i]>9)
shuzu[i]=zifu[i]-'A'+10;
else
shuzu[i]=zifu[i]-'0';
printf("转化输出为:%d",shuzu[i]);
}
return shuzu;
}
#include<stdlib.h>
int main(void)
{
int len;//定义输入字符串的长度
char *str_in;//定义输入字符串的指针
char *pa;//定义数组a,用来装入字符
int i;
printf("输入要转换的数字:\n");
scanf("%s",str_in);//输入字符串
len = strlen(str_in);//计算输入字符串的长度
pa = (char*)malloc(len*sizeof(int));//分配内存给pa
pa = str_in;//将输入的字符串赋给数组
for(i=0;i<len;i++)
{
printf("pa[%d]=%c \n",i,pa[i]);//打印转化后的数组
}
printf("\n");
free(pa);//释放分配的内存
getch();
return 0;
}
*str是野指针,很容易导致程序崩溃
#include<stdio.h>
int main(void)
{
char str[100] = {0}; // char *str;
scanf("%s",str);
printf("你输入的是:%s",str);
getch();
return 0;
}
#include<stdio.h>
int main(void)
{
char *str;
scanf("%s",str);
printf("你输入的是:%s",str);
getch();
return 0;
}
/**************************
2010.01.13
版本 V0.1
用途:输入一个字符串,并转化为数组
*****************************/
#include<stdio.h>
#include<stdlib.h>
#include<process.h>
int *zifu_shuzu(int length,char *zifu);
int main(void)
{
char *str;
int *shuzu;
int length;
int i;
printf("输入要转化的数字:\n");
scanf("%s",str); ------------- str的空间在哪?
length=strlen(str);
shuzu=zifu_shuzu(length,str);//程序执行到这里就会崩溃
for (i=0; i<length;i++)
printf("shuzu[%d]=%d \n",i,shuzu[i]);
if(shuzu!=NULL)
{
free(shuzu);
shuzu=NULL;
}
free(shuzu);
return 0;
}
//将一个字符串转化成十进制数表示的数组
int *zifu_shuzu(int length,char *zifu)
{
int i=0;
int *shuzu=(int *)malloc(sizeof(int)*length);//感觉好像是这里出问题了
for (i=0;i<length;i++)
{
if (zifu[i]>9)
shuzu[i]=zifu[i]-'A'+10;
else
shuzu[i]=zifu[i]-'0';
printf("转化输出为:%d",shuzu[length-1-i]);
}
return shuzu;
}
int count;
char * words = NULL;
printf("Please input your word count : \n");
scanf("%d", &count);
words = (char*)malloc(count);// 使用用户指定的大小
if( NULL == words ){
// 因为用户输入的数据可能是负数,也可能超过系统内存大小,很可能导致malloc失败,返回NULL
// 因此要出错处理
printf("Can't give you so much memery : %d \n", count);
return -1;// 退出当前函数
}
// 分配成功后,用words接受用户的输入,如果发生越界,可以进行出错处理,也可以让用户自食苦果...囧
...
#define MYSIZE 1024 // 预先定义内存块大小单位
...
char *pWords = NULL;// 用户输入缓冲
char *pTemp = NULL;// 备用缓冲
int size = MYSIZE;// 初始化内存块大小
int inputId = 0 ;// 当前输入的字节数
...
pWords = (char*)malloc(size);// 第一次分配内存
while(true){
// 使用scanf("%c",...)逐个字节循环接受用户输入
scanf("%c", &(pWords[inputId]));// 接受字符到 inputId 的位置
inputId++;// 下标增加
if(inputId >= size-1){
// 如果下个字符已经到了缓冲边界,需要开辟更大的缓冲
size += MYSIZE;// 缓冲大小增加一个单位
pTemp = (char*)malloc(size);// 篇幅有限,省略调用malloc的出错处理
memcpy(pTemp, pWords, size-MYSIZE);// 调用memcpy将旧缓冲的数据拷贝到临时缓冲中,注意缓冲的大小
free(pWords);// 将旧缓冲释放
pWords = pTemp;// 临时缓冲转正
pTemp = NULL;// 防止使用pTemp,因为它不是正宫……
}
// 无限接受用户输入,不断的循环……
}
char *s;//这个语句执行完之后,s很纳闷,它不知道自己的主人是谁
s =(char *)malloc(10);// 调用malloc向系统申请了10个字节的“堆内存”,把这个内存的地址告诉s,这时候s才安全了。
free(s);// 调用free把s插着的内存还给系统
s = NULL;//让s沉睡吧