C程序串乱

时间:2012-10-25 03:35:26

标签: c string

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

正确

1 个答案:

答案 0 :(得分: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);