5

我试图删除字符串的第一个字符并保留其余部分,我当前的代码无法编译并且我对如何修复它感到困惑。

我的代码:

char * newStr (char * charBuffer)
{
    int len = strlen(charBuffer);
    int i = 1;
    char v;
    if(charBuffer[0] == 'A' || charBuffer[0] == 'Q'){
        for(i=1;i<len;i++)
            v = v + charBuffer[i];
    }
    v = v + '\0';
    return v;
}

Gcc:“警告:返回使指针从整数而不进行强制转换”

另外:“char * newStr (char * charBuffer)”需要保持不变。

4

5 回答 5

8

字符串在 C 中不是这样工作的。您将缓冲区中的所有字符汇总到v变量中。您不能使用 + 来连接。您发布的代码有一些严重的问题,这表明在如何使用 C 方面存在理解差距。

试试这个:

char *newStr (char *charBuffer) {
  int 长度 = strlen(charBuffer);
  字符 *str;
  如果(长度<= 1){
    str = (char *) malloc(1);
    str[0] = '\0';
  } 别的 {
    str = (char *) malloc(长度);
    strcpy(str, &charBuffer[1]);
  }
  返回字符串;
}

或这个:

char *newStr (char *charBuffer) {
  字符 *str;
  if (strlen(charBuffer) == 0)
    str = 字符缓冲区;
  别的
    str = 字符缓冲区 + 1;
  返回字符串;
}

取决于您是否要分配新字符串。您还必须添加代码以处理不以“Q”或“A”开头的情况。我没有包括那些,因为我不确定你在这里想要做什么。

确保您对使用 malloc 和 free 分配和释放内存进行了一些研究。如果您要进行 C 编程,这些是可以使用的基本功能。

于 2010-07-28T19:20:36.447 回答
2

好吧,您的描述说您要处理“字符串”,但是您的代码处理的是字符缓冲区/指针。删除字符串的第一个字符的最简单方法是

const char *newStr(const char *string)
{
    return string+1;
}

但由于这看起来不像你的代码在做什么,你可能想要一些不同的东西。例如,如果您只想删除前导“A”或“Q”,然后将字符串复制到缓冲区,则需要类似

char *newStr(const char *string)
{
    if (string[0] == 'A' || string[0] == 'Q')
        string++;
    return strdup(string);
}
于 2010-07-28T19:24:04.833 回答
-1

您可以简单地将 char 指针移动一个字符:

char* newstring = oldstring + 1;
于 2010-07-28T19:16:52.877 回答
-1

您的函数被声明为返回一个 char * 并且您正在返回一个 char。

此外,你为什么不直接返回一个指向第二个字符的指针呢?

char * newStr (char * charBuffer)
{
   if (charBuffer && (*charBuffer == 'A' || *charBuffer == 'Q')) return charBuffer + 1;
   return charBuffer;
}
于 2010-07-28T19:17:00.587 回答
-1

其他几个答案建议返回charBuffer + 1。正如我在之前的评论中指出的那样:

这是不好的做法。如果字符串是动态分配的呢?也许最终会释放存储空间(从第二个字符开始)。应首先将字符串复制到新存储中。

从中间释放一块存储将导致未定义的行为。

相反,请尝试strdup将返回给定字符串副本的函数。

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

char *newStr(char* charBuffer) {
    if (charBuffer && (charBuffer[0] == 'A' || charBuffer[0] == 'Q'))
        return strdup(charBuffer + 1);
    else 
        return strdup(charBuffer);
}

void main() {
    char a[7] = "Advait";
    char b[5] = "John";
    printf("%s\n",newStr(a));   // Prints "dvait"
    printf("%s\n",newStr(b));   // Prints "John"
}
于 2010-07-28T19:31:08.127 回答