我需要以这种方式操作一个字符串:
如果字符是'+'或' - '或'/'或'*',则将它们移动到缓冲区的末尾,否则,移动到缓冲区的开头.
我的解决方案非常简单:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void mix_the_string(char ** buff, char ** string)
{
printf("The string which will be printed is : %s\n",*string);
int i = 0;
int j = strlen(*string) - 1;
while(i< strlen(*string))
{
if(*string[i] != '+' || *string[i] != '-' || *string[i] != '*' || *string[i] != '/')
{
printf("in the first if, i = %d, *string[i] = '%d'\n",i,(int)*string[i]);
*buff[i] = *string[i];
}
else
{
printf("in the second if, i = %d, *string[i] = '%d'\n",i,(int)*string[i]);
*buff[j] = *string[i];
}
i++;
j--;
}
}
int main()
{
char * buff = (char *) malloc(50);
char * string = (char *) malloc(50);
string = "1+2+3";
mix_the_string(&buff,&string);
puts(buff);
free(buff);
free(string);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出是:
The string which will be printed is : 1+2+3
in the first if, i = 0, *string[i] = '49'
in the first if, i = 1, *string[i] = '49'
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
我希望通过这个例子输出如下:
The string which will be printed is : 1+2+3
in the first if, i = 0, *string[i] = '49'
in the second if, i = 1, *string[i] = '43'
in the first if, i = 2, *string[i] = '50'
in the second if, i = 3, *string[i] = '43'
in the first if, i = 4, *string[i] = '51'
123++
Run Code Online (Sandbox Code Playgroud)
我哪里错了?
*string[i]和(*string)[i]符号之间有区别.[]优先级高于*运算符.您通过指针将字符串传递给指针,因此您应该调用(*string)[i]代码的每一行.
(*string)[i]表示 - 取消引用指向数组的指针并获取i-th字符串数组的元素
现在你在做
*string[i]- 获取i-th字符串数组的元素(!!但这不是数组,这只是一个元素)并取消引用第一个元素
做同样的事buff.
在main函数中,你应该将1 + 2 + 3字符串文字复制到string缓冲区中,例如按strcpy函数.