c-打印过程中出现访问冲突错误



我正试图使用printf函数打印一个字符串,该字符串来自传递给函数的指针。

printf("%sn", strng[1]);

strng由调用者传入。这是一根前面有空格的绳子,我想去掉那个空格。因此,我有下面的代码。

for(i=0; i<slength -1; i++) {
    printf("%sn", strng[1]);
    tstr[i] = strng[i+1];
    printf("%sn", tstr);
}
tstr[slength] = 0;

它一直给我一个访问违规错误,我不明白为什么。如果我去掉printf行,那么我可以运行代码,但返回字符串tstr的末尾总是有一个额外的字符。

  bp185080
  9
 bªM
 bpM
 bp1
 bp18─
 bp185
 bp1850K
 bp18508
 bp185080=::=::
 bp185080=

我如何摆脱空白而不增加一个字符?

您基本上是在尝试使用一个字符作为指针。将strng[1]替换为&strng[1]strng + 1

您的循环与printf有几个问题;

for(i=0; i<slength -1; i++) {
    printf("%sn", strng[1]);   // Prints a character with a format of a string,
                                // you may want to use %c here instead to print
                                // the second char, or strng+1 to print the
                                // string starting with the second character.
    tstr[i] = strng[i+1];
    printf("%sn", tstr);       // Prints tstr before terminated with , which
                                // is undefined behaviour, may very well crash.
}
tstr[slength] = 0;

似乎循环一次迭代太少,无法处理最后一个字符,您可能需要执行for(i=0; i<slength; i++)

最新更新