0

我正在尝试使用 printf 函数从传递给函数的指针中打印一个字符串。

printf("%s\n", strng[1]);

strng 由调用者传入。它是一个前面有空格的字符串,我想删除那个空格。因此我有下面的代码。

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

它一直给我一个访问冲突错误,我不明白为什么。如果我取出 printf 行,那么我可以运行代码,但返回字符串 tstr 总是在它的末尾有一个额外的字符。输出看起来像这样。

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

我如何摆脱空白并且没有额外的字符?

4

2 回答 2

4

You are basically trying to use a character as a pointer. Replace strng[1] with either &strng[1] or strng + 1.

于 2013-06-28T15:02:29.190 回答
1

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

for(i=0; i<slength -1; i++) {
    printf("%s\n", 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("%s\n", tstr);       // Prints tstr before terminated with \0, which
                                // is undefined behaviour, may very well crash.
}
tstr[slength] = 0;

似乎您循环一次迭代的次数太少而无法处理最后一个字符,您可能想要做for(i=0; i<slength; i++).

于 2013-06-28T15:05:00.897 回答