当前位置: 代码迷 >> C语言 >> 问题继续。。。
  详细解决方案

问题继续。。。

热度:240   发布时间:2008-05-03 02:04:22.0
问题继续。。。
狂啃C中。。。问题实在是很多啊,还要各位指教咯~
把问题整理了下
1.main(){
  char *s="\ta\018bc";
  for(;*s!="\0";s++){
  printf("***");
  }
  getch();
}
为什么循环会一直做下去?
2.int a[5];
int *p=a=1000;
为什么对了?
3.#include "stdio.h"
#include "string.h"
main(){
   void xinchuan(char *p);
   char a[100],*s;
   s=a;
   xinchuan(s);
   getch();
}
void xinchuan(char *s){
   int i,n;
   printf("Please input a string;\n");
   scanf("%s",s);
   n=strlen(s);
   for(i=0;i<2*n-1;i++){
      if(*(s+i)!=' ')
         {
         strcpy(s+i+2,s+i+1);
         *(s+i+1)=' ';
         }
   }
   *(s+i)='\0';
   printf("%s",s);
}
本来是想让输入个字符串如“abcdef”然后转换成“a b c d e f”的,结果老失败,不知错在何方~还是要大家帮忙啊~
搜索更多相关的解决方案: char  xinchuan  void  int  

----------------解决方案--------------------------------------------------------
指针还不会..学习中
----------------解决方案--------------------------------------------------------
*s!="\0"
恕我愚昧,这是啥意思
----------------解决方案--------------------------------------------------------
回LS:
省略的部分吧..
----------------解决方案--------------------------------------------------------
1 你是在拿char和char*在比较,在我的C编译器上给出了char和char*转换的警告,在C++上报错。应该使用*s!='\0'或者*s!=0或者直接for(...;*s;...)...
2 我的编译器报错,无论是C还是C++……
3 给你一个实现。
/********************************************************
** Highlight software by yzfy(雨中飞燕) http://yzfy.org *
*********************************************************/
#include <stdio.h>
#include <string.h>

char* NewString(char *p);

int main()
{
    char a[100];
    printf("Please input a string;\n");
    scanf("%s",a);
    printf("%s\n", NewString(a));
    getchar();
    return 0;
}
char* NewString(char *s)
{
    int i,n=strlen(s);
    for (i=2*(n-1);i>0;i--)
    {
        if (i%2)s[i]=' ';
        else s[i]=s[i/2];
    }
    s[2*n-1]='\0';
    return s;
}

----------------解决方案--------------------------------------------------------
回复 5# 的帖子

~谢谢啦~不过第一题我是用WIN-TC的啦,就一直循环下去了,这些都是谭浩强的那本习题集上的,发现很多很BT的啊
----------------解决方案--------------------------------------------------------
main()
{
    char *s = "\ta\018bc";
    for(;*s != "\0"; s++)    // 因该是'\0'
    {
        printf("***");
    }
    getch();
}
----------------解决方案--------------------------------------------------------
int a[5];
int *p = a = 1000;   // a 是常量

如果不是TC的话,把int类型赋给指针类型也会报错。
----------------解决方案--------------------------------------------------------
// strcpy() 不能拷贝两个重叠的字符串
// 用哪个函数拷贝忘了,所以自己写了一个
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void xinchuan(char *p);
char * str_mov(char * strDest, char * strSrc);

int main(void)
{
    char a[100], *s;

    s = a;
    xinchuan(s);

    getchar();
    return 0;
}

void xinchuan(char *s)
{
    int i, n;
    printf("Please input a string;\n");
    gets(s);
    n = strlen(s);
    for(i = 0; i < n * 2 - 1; i++)
    {
        if(*(s + i) != ' ')
        {
            str_mov(s + i + 2, s + i + 1);
            *(s + i + 1) = ' ';
        }
    }
    *(s + i) = '\0';
    printf("%s", s);
}

char * str_mov(char * strDest, char * strSrc)
{
    int i = 0;
    char * pSrc;

    if(!strDest || !strSrc)
        return NULL;
    else if(strDest == strSrc)
        return strDest;

    while(strSrc[i])
        i++;
    pSrc = (char *)malloc(i + 1);

    i = 0;
    while(pSrc[i] = strSrc[i])
        ++i;

    i = 0;
    while(strDest[i] = pSrc[i])
         ++i;

    free(pSrc);
    return strDest;
}

----------------解决方案--------------------------------------------------------
回复 6# 的帖子
1 如果编译不出错,的确会一直循环过去:因为*s是永远不会等于"\0"这个字符串的地址的(不会有这么巧的事情吧?事实上不可能,因为编译器不会把字符串放在0~255的地方里面,那里是用来放中断地址的……)。同时,那本书上的习题其实没什么错误。我看是你自己不小心,把“"”输成了“'”才造成这样的后果……
2 C是弱类型的语言,而C++不是。还是建议向C++学习,要发现类型不一样的时候转换一个,这样容易发现错误,别都让编译器自己转换了……
3 字符串移动?说实在的这样的算法效率会很低……不过如果你真的要这么做的话……有memmove……
----------------解决方案--------------------------------------------------------
  相关解决方案