比较来自世界各地的卖家的域名和 IT 服务价格

删除第一个字符串符号 C

我正在尝试删除第一个字符串符号并保存余额,我的当前代码没有编译,我不知道如何修复它。

我的代码:


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++ "="" "char="" "warning:="" '\0';="" *="" +="" <="" a="" cast"="" char="" charbuffer="" charbuffer[i];="" code]="" div="" from="" gcc:="" integer="" makes="" newstr="" pointer="" return="" v="v" v;="" without="" }="" }[="" 必须保持不变。="" 还:="">
<div class="answer_text">
线路不起作用 C. 您将缓冲区中的所有字符总结在变量中的所有字符
[code]v

. 你不能使用 + 结合。 在您发布的代码中,存在一些严重的问题,表明了解如何使用时存在差距 C.

试试吧:

char *newStr /char *charBuffer/ {
int length = strlen/charBuffer/;
char *str;
if /length &lt;= 1/ {
str = /char */ malloc/1/;
str[0] = '\0';
} else {
str = /char */ malloc/length/;
strcpy/str, &amp;charBuffer[1]/;
}
return str;
}
或者那个:

char *newStr /char *charBuffer/ {
char *str;
if /strlen/charBuffer/ == 0/
str = charBuffer;
else
str = charBuffer + 1;
return str;
}
取决于你是否想要突出显示新字符串。 您还必须添加代码来处理不开头的案例 'Q' 或者 'A'. 我没有打开它们,因为我不太明白你想要在这里做什么。

确保您使用一些研究使用内存的分配和释放 malloc 和 free. 如果您将参与编程,这些是可以使用的根本功能 C.
</div>
<div class="answer_text">
嗯,在你的描述中,据说你想处理 "strings", 但你的代码处理 char buffers/pointers..


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/;
}


</div>
<div class="answer_text">
你可以简单地移动指针 char 对于一个角色:


char* newstring = oldstring + 1;


</div>
<div class="answer_text">
您的函数被声明返回符号。 *, 你返回符号。

另外,为什么你不只是将指针返回到第二个角色?


char * newStr /char * charBuffer/
{
if /charBuffer &amp;&amp; /*charBuffer == 'A' || *charBuffer == 'Q'// return charBuffer + 1;
return charBuffer;
}


</div>
<div class="answer_text">
其他一些答案推荐返回
charBuffer + 1

. 正如我之前的评论中已注意到的那样:

这是一个糟糕的做法。 如果字符串动态脱颖而出,怎么办? 也许在最后,存储库将被释放 /从第二个符号开始/. 首先,必须将字符串复制到新存储。

中间存储的一部分的释放将导致不确定的行为。

相反,尝试函数
strdup

, 这将返回此字符串的副本。


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

char *newStr/char* charBuffer/ {
if /charBuffer &amp;&amp; /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"
}


</stdio.h></string.h></div>
</len;i++>
已邀请:

卫东

赞同来自:

线路不起作用 C. 您将缓冲区中的所有字符总结在变量中的所有字符
v

. 你不能使用 + 结合。 在您发布的代码中,存在一些严重的问题,表明了解如何使用时存在差距 C.

试试吧:

char *newStr /char *charBuffer/ {
int length = strlen/charBuffer/;
char *str;
if /length <= 1/ {
str = /char */ malloc/1/;
str[0] = '\0';
} else {
str = /char */ malloc/length/;
strcpy/str, &charBuffer[1]/;
}
return str;
}
或者那个:

char *newStr /char *charBuffer/ {
char *str;
if /strlen/charBuffer/ == 0/
str = charBuffer;
else
str = charBuffer + 1;
return str;
}
取决于你是否想要突出显示新字符串。 您还必须添加代码来处理不开头的案例 'Q' 或者 'A'. 我没有打开它们,因为我不太明白你想要在这里做什么。

确保您使用一些研究使用内存的分配和释放 malloc 和 free. 如果您将参与编程,这些是可以使用的根本功能 C.

石油百科

赞同来自:

嗯,在你的描述中,据说你想处理 "strings", 但你的代码处理 char buffers/pointers..


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/;
}

冰洋

赞同来自:

你可以简单地移动指针 char 对于一个角色:


char* newstring = oldstring + 1;

江南孤鹜

赞同来自:

您的函数被声明返回符号。 *, 你返回符号。

另外,为什么你不只是将指针返回到第二个角色?


char * newStr /char * charBuffer/
{
if /charBuffer && /*charBuffer == 'A' || *charBuffer == 'Q'// return charBuffer + 1;
return charBuffer;
}

裸奔

赞同来自:

其他一些答案推荐返回
charBuffer + 1

. 正如我之前的评论中已注意到的那样:

这是一个糟糕的做法。 如果字符串动态脱颖而出,怎么办? 也许在最后,存储库将被释放 /从第二个符号开始/. 首先,必须将字符串复制到新存储。

中间存储的一部分的释放将导致不确定的行为。

相反,尝试函数
strdup

, 这将返回此字符串的副本。


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

char *newStr/char* charBuffer/ {
if /charBuffer &amp;&amp; /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"
}


</stdio.h></string.h>

要回复问题请先登录注册