LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 981|回复: 8

請教一個很菜的c 語言問題, 請各位指教.

[复制链接]
发表于 2006-10-16 16:05:47 | 显示全部楼层 |阅读模式
在 C 語這中, 指針是最強的. 但現在我有一個關於指針的問題想請教各位..

有一個函數, 它會傳入一個字串(字串內容全是數字來的)如:

int function(char *input);

這個函數主要是分解input成為幾個小字串.. 這小字串只在function內有效. 不需要傳回值的.

如傳入 12345678999234 等...每個傳入的字串長度都是一樣, 而格式亦都是一樣的. 格式是
123, 456, 78, 999, 234 的.
請問怎樣用指針能實現把這個小字串分離呢...

我只能把字串用 sprintf 放到一個陣列 tmp 內, 再用 tmp[?] 這個型式很蠢的一個一個抽出來, 我想學學用指針.. 請各位指教一下;

希望能附上代碼加以學習. 謝謝.
发表于 2006-10-16 16:32:22 | 显示全部楼层
  1. struct A
  2. {
  3.     char s1[3];
  4.     char s2[3];
  5.     char s3[2];
  6.     char s4[3];
  7.     char s5[3];
  8. } __attribute__((packed)) *pa;
  9. pa = (struct A*)input;
复制代码
则pa->s1、pa->s2。。。就是你要的
小心越界
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-10-16 16:55:52 | 显示全部楼层
Post by x11
  1. struct A
  2. {
  3.     char s1[3];
  4.     char s2[3];
  5.     char s3[2];
  6.     char s4[3];
  7.     char s5[3];
  8. } __attribute__((packed)) *pa;
  9. pa = (struct A*)input;
复制代码

则pa->s1、pa->s2。。。就是你要的
小心越界



先謝謝你.
但 __attribute__((packed)) *pa; 意思是什麼..
回复 支持 反对

使用道具 举报

发表于 2006-10-16 17:57:10 | 显示全部楼层
*pa 嘛当然是定义一个指针pa了

中间那个自己google吧
回复 支持 反对

使用道具 举报

发表于 2006-10-17 09:37:58 | 显示全部楼层
似乎不能按 3位  分开吧
我做的试验

  1. [/home/inter/lp/play>]vi test17.c

  2. struct _str
  3. {
  4.         char a[10];
  5.         char b[10];
  6. }__attribute__((packed))*my_str;

  7. int main()
  8. {
  9.         char *a="qweasdasdgadgag";
  10.         my_str=(struct _str*)a;
  11.         printf("%s...%s..\n",my_str->a,my_str->b);
  12.         return 0;
  13. }
  14. ~
  15. ~
  16. ~
  17. ~
  18. ~

  19. "test17.c" 13L, 197C 已写入                                                               
  20. [/home/inter/lp/play>]cc test17.c
  21. [/home/inter/lp/play>]./a.out
  22. qweasdasdgadgag...adgag.
复制代码



还是越界了
而不是

qweasdasdg...adgag.


请指教
回复 支持 反对

使用道具 举报

发表于 2006-10-17 11:12:37 | 显示全部楼层
1: 数字的ascii码跟逗号的ascii码不是一的,就用ascii码区分吧.

2:或者可以有和strtok这个库函数. 网上有些例子的,专门做你说的那种事情的,呵呵.
回复 支持 反对

使用道具 举报

发表于 2006-10-17 17:17:14 | 显示全部楼层
如傳入 12345678999234 等...每個傳入的字串長度都是一樣, 而格式亦都是一樣的. 格式是
123, 456, 78, 999, 234 的.
到底是传进12345678999234还是传进123, 456, 78, 999, 234
回复 支持 反对

使用道具 举报

发表于 2006-10-17 19:10:38 | 显示全部楼层
我猜是后者,呵呵
回复 支持 反对

使用道具 举报

发表于 2006-10-18 10:23:21 | 显示全部楼层
输入的是非格式化的。既然都用结构体分开,那就要保证长度 是在定义内。
那就可以按照以3个数字一组。
这样按照数组输出。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表