佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

搜索
查看: 1152|回复: 3

c programming 的问题 帮帮忙 !! [已解决]

[复制链接]
发表于 29-12-2009 01:41 AM | 显示全部楼层 |阅读模式
本帖最后由 illusionX 于 29-12-2009 02:53 PM 编辑

我的问题是 add string, 就是把两个 string 加在一起这么简单,第一个是 first string + second string
第二个是 second string + first string


但是我输入了两个 sting 过后,例如 1. asd    2. dsa


答案出来是:
1. asddsa
2. dsaasd*

那个*是一直会random出现一些很搞笑的符号,为什么会这样?

p/s : 有一定的几率答案会对 ==..



  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(){

  4. int lengthA, lengthB;
  5. int i;

  6. char stringA[30];
  7. char stringB[30];
  8. char stringA1[30];
  9. char stringB1[30];

  10.                         
  11.                         
  12.         printf("Enter the first string, maximum 30 characters : ");        // 1st sting input
  13.         gets(stringA);
  14.         fflush(stdin);
  15.         
  16.     lengthA = strlen(stringA);
  17.         for(i=0; i<lengthA; i++){
  18.               stringA1[i] = stringA[i];
  19.     }                                
  20.         

  21.     while(lengthA>50){
  22.             printf("You only can input maximum 30 string, please input again : ");
  23.             gets(stringA);
  24.             fflush(stdin);
  25.             }
  26.                
  27.     printf("\nYou have input : [ %s ]\n", stringA);
  28.     printf("The length of the string are [ %d ]\n\n", lengthA);
  29.                     
  30.     printf("Enter the second string, maximum 30 characters : ");       // 2nd string input
  31.     gets(stringB);
  32.     fflush(stdin);
  33.    
  34.     lengthB = strlen(stringB);
  35.     for(i = 0; i < lengthB; i++){
  36.               stringB1[i] = stringB[i];
  37.     }                                
  38.      
  39.    
  40.     while(lengthB>50){
  41.                         printf("You only can input maximum 30 string, please input again : ");
  42.                         gets(stringB);
  43.                         fflush(stdin);
  44.                         }
  45.                         
  46.                         
  47.                         
  48.     printf("\nYou have input : [ %s ]\n", stringB);
  49.     printf("The length of the string are [ %d ]\n\n", lengthB);
  50.    
  51.    
  52.     printf("\t1. %s.\n", strcat(stringA, stringB));
  53.     printf("\t2. %s.\n", strcat(stringB1, stringA1));

  54.    
  55.     system("pause");
  56.    
  57.    

  58. }
复制代码
回复

使用道具 举报


ADVERTISEMENT

发表于 29-12-2009 01:55 PM | 显示全部楼层
在24行添加
  1. stringA1[i] = 0;
复制代码
在43行添加
  1. stringB1[i] = 0;
复制代码
楼主犯了一个C初学者很容易犯得一个错误,C语言中的字符串(string)必须要以0为结束。
  1. char   *str   =   "abc";   
复制代码
其实占了4个字节,最后一个字节是0 ,而这个string的长度是3,所以你用strlen(str)得到的是3。要注意两者之间的区别,在申请存储空间的时候要在string长度上+1。

请搜索技术手册中“null terminated string”。

另外第26和45行也不对,此时检测string长度,实际上已经造成内存越界。
回复

使用道具 举报

 楼主| 发表于 29-12-2009 02:33 PM | 显示全部楼层
哇 !!!
可以了 !!
谢谢你 !!
回复

使用道具 举报

发表于 14-1-2010 11:10 AM | 显示全部楼层
oh~  Thks..,
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2026 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 9-5-2026 01:01 AM , Processed in 0.076600 second(s), 13 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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