回 帖 发 新 帖 刷新版面

主题:[讨论]字符串右移问题

[code=c]
void Left_Move(char *str,int n)//n为移位的位数
{
    int i = 0;
    char *temp = (char*)malloc(n);
    int strLen = 0;
    char *head = str;

    strLen = strlen(str) + 1;

    for(i = 0; i<n ; i++)
    {
        temp[i] = head[strLen-n+i];//临时存放从尾部移到头部的字符;
    }
    for(i = strLen - 2; i >= n;i--)
    {
        head[i] = head[i-n];
    }
    for(i = 0; i<n ;i++)
    {
        head[i] = temp[i];
    }

    free(temp);
}
在VC6下编译没有错误,确运行不了。这是哪里出了问题?
请教![/code]

回复列表 (共4个回复)

沙发

什么叫“运行不了”……建议你跟一下代码,看看字符串尾的NUL跑哪去了

板凳

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

void Left_Move(char *str,int n)//n为移位的位数
{
    int i = 0;
    char *temp = (char*)malloc(n);
    int strLen = 0;
    char *head = str;
    strLen = strlen(str)+1;

    for(i = 0; i<n ; i++)
    {
        temp[i] = head[i];//临时存放从尾部移到头部的字符;
    }
    for(i = 0; i < strLen-n-1;i++)
    {
        if(head[n+i]!='\0')
             head[i] = head[n+i];
    }
    for(int j=0; i<strLen-1;j++,i++)
    {

        head[i] = temp[j];
    }

    free(temp);
}


int main()
{
    char p[]="wangzining";
    Left_Move(p,3);
    printf("%s",p);
}
字符串的结尾自动添加结束符'\0',但即使没有考虑,你的程序也可以运行,楼主提到的运行出错,可能是因为定义时是这样定义的char *p="wangzining",如果这样定义,编译器认为p为const char *类型,是不允许修改字符串值的,所以会出错。

3 楼

哎。我main函数里确实写成那样了。不过程序改了之后还是结果错误。我再看看。谢谢啊!

4 楼

我想问下<font color="red">右</font> 英文是Left?

我来回复

您尚未登录,请登录后再回复。点此登录或注册