Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-在括号内添加空格_C_Arrays_String - Fatal编程技术网

C-在括号内添加空格

C-在括号内添加空格,c,arrays,string,C,Arrays,String,因此,我做了一些错误的这个程序,并希望有人帮助。我想在括号和里面的单词之间加上空格。例如,如果原始字符串是if(x=5),那么我想将其设置为if(x=5)。我知道一个简单的任务,下面是我的代码: char* addSpaces(char* line) { int i,j; char *result = line; for (i = 0, j = 0; i<strlen(line); i++,j++) { if (lin

因此,我做了一些错误的这个程序,并希望有人帮助。我想在括号和里面的单词之间加上空格。例如,如果原始字符串是
if(x=5)
,那么我想将其设置为
if(x=5)
。我知道一个简单的任务,下面是我的代码:

char* addSpaces(char* line) {

    int i,j;
    char *result = line;

    for (i = 0, j = 0; i<strlen(line); i++,j++)          
    {
        if (line[i] == '[') {
            result[j] = line[i];
            j++;
            result[j] = ' ';
        }  
        else if (line[i] == ']') {
            result[j] = ' ';
            j++;
            result[j] = line[i];
        }                 
        else result[j] = line[i];                                        
    }

    result[j] = 0;

    return result;

}
char*addSpaces(char*line){
int i,j;
字符*结果=行;

对于(i=0,j=0;i如果输入和输出字符串指向同一个缓冲区,则您的算法无法工作(这是您设置的方式)。因为您正在用较长的字符串覆盖输入字符串(至少在您的示例中),您最终将覆盖空终止符。这将导致下一次循环条件调用strlen时出现未定义的行为,然后所有下注都将关闭


与其覆盖输入缓冲区,不如分配一个新的更大的缓冲区,进行复制,然后返回一个指向该新缓冲区的指针。

输入缓冲区没有有效性,或者您只是假设输入缓冲区足够长,可以在添加空格后保存?就像Carl说的,最好在函数内部分配内存(您可能需要在字符串中运行一次,以计算需要分配多少)然后返回新分配的缓冲区,该缓冲区填充了新值