大家帮我看看原代码吧,目的是把字符串放在结构中,加上附加信息后在赋给一个字符缓冲区。
这程序十分钟前还能执行的,改了点东西就恢复不过来吧。
救救我吧,太打击人了 javascript:window.open(this.src);" style="CURSOR: pointer" onload="return imgzoom(this,550)">
[code:1:d24d43964c]#include <stdio.h>
/* package struct */
struct package
{
unsigned int length;
unsigned char *data;
};
/* make package from original data buffer */
struct package makePackage ( unsigned char *buf)
{
struct package pac;
printf("ready.\n");
// memset(pac.data, 0x0, 64);
memcpy(pac.data,buf, strlen(buf));
pac.length = strlen(pac.data);
printf("pac.length is %d \n", pac.length);
return pac;
}
/* package convert to buffer */
void convert(struct package pac, unsigned char *buf)
{
printf("ready2.\n");
buf[0] = (unsigned char)(pac.length & 0x00ff);
memcpy(&buf[1], pac.data, pac.length);
printf("convert ok: %s \n", pac.data);
}
int main()
{
/* TEST code data_buffer -> snd_file -> snd_buffer */
unsigned char *snd_buffer; /* 结构化后的字符串 */
struct package snd_file;
unsigned char *data_buffer; /* 原始数据 */
data_buffer = "\nhello\n";
printf("data_buffer size is: %d \n", strlen(data_buffer));
snd_file = makePackage(data_buffer);
//memset(snd_buffer, 0x0, SIZE);
convert(snd_file, snd_buffer);
printf("the size of the package is %d. \n", sizeof(snd_file));
printf("the size of the buffer is %d. \n", strlen(snd_buffer));
}
[/code:1:d24d43964c]
bjchenxu 回复于:2003-09-17 10:28:43 |
初学者一般犯的错误就是对内存不能理解:) 当然,你要是理解内存,你就不是c的初学者了 makePackage()中的 memcpy(pac.data,buf, strlen(buf)); 一句 pac.data是一个指针,因为我们从来没有对pac进行过初始化,所以这个指针可能指向0,如果是0,那么这句代码直接导致段错误 应该怎么做呢?在该句之前加上分配空间的语句,用malloc(),多大空间呢,当然是strlen(buf) |
carol1980 回复于:2003-09-17 13:05:53 |
谢谢,你讲的好清楚哦, 是不是改用strcpy( , ), 就可以避免这个问题了, |
mosaic 回复于:2003-09-17 13:10:40 |
strcpy会自动分配空间吗? |
mosaic 回复于:2003-09-17 13:15:23 |
c里面这样也可以啊? data_buffer = "\nhello\n"; |
mosaic 回复于:2003-09-17 13:23:49 |
越看越奇怪,几个指针都没分配空间,这怎么可以呢? 请高手解答一下 |
carol1980 回复于:2003-09-17 14:40:13 |
a, en, 我是菜鸟,对指针,数组的分配赋值问题稀里糊涂的,有什么不妥当的地方大家提出来改进啊 |
bjchenxu 回复于:2003-09-17 14:58:15 |
carol,mosaic 抱歉,你们还是看看谭浩强的c语言书,虽然该书现在已经沦落到地摊上,但是其基础还是蛮扎实的,注意看看指针一章 如果实在不愿看,可以去c语言版,那里有几位高手,呵呵 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/