2
for (i = 0; i < size; i++) {
if((string[i] >= 65 && string[i] <= 90) || (string[i] >= 97 && string[i] <= 122) || string[i] == 10) {
    sec_str[j] = tolower(string[i]);
    putchar(sec_str[j]);
    j++;
}
}
printf("%s\n", sec_str);

这是我的代码,试图将一个字符串复制到另一个字符串,剥离所有非字母大小写,这对我来说很好,我使用 putchar(sec_str[j]) 进行检查,它们都很好,但是当我检查时printf("%s", sec_str),输出一团糟。像这样的东西:

asantaspotstopsatnasa
asantaspotstopsatnasa

twasbrilligandtheslithytoves
twasbrilligandtheslithytoves
����r�$
yobananaboy
yobananaboy
ndth
neveroddoreven
neveroddoreven
h
thetimehascomethewalrussaid
thetimehascomethewalrussaid
����t�r�$

并且 printf 应该打印

asantaspotstopsatnasa
twasbrilligandtheslithytoves
yobananaboy
neveroddoreven
thetimehascomethewalrussaid

要正确

4

1 回答 1

4

您忘记在字符串末尾添加空终止符:)

#include <stdio.h>
#include <ctype.h>
...
  for (i = 0; i < size; i++) {
    if(ischar(string[i]) ||  (string[i] == 10) ) {
      sec_str[j] = tolower(string[i]);
      putchar(sec_str[j]);
      j++;
    }
  }
  sec_string[j] = '\0';
  printf("%s\n", sec_str);
于 2012-10-25T03:36:18.050 回答