为什么在C的字符串末尾添加了奇怪的符号?

时间:2014-07-09 12:20:34

标签: c

我刚开始学习C语言。 我的代码在字符串中找到字母(a-z或A-Z)的短格式或数字(0-9) 然后扩展它(abcd..z等)。

但我遇到了一个问题 - 在字符串的末尾添加了一些奇怪的符号。你能帮我解决这个问题吗?

查看代码和结果: http://codepad.org/4sfBZv48

代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{

char str[16] = "--g-6hA-Za-z56-9";
char exstr[127];
int lasti = 0;

int i;
int j;
int start;

for(i = 0; str[i] != 0; i++){

    if(str[i] > 64 && str[i] < 91 && str[i+1] == '-' && str[i+2] > 64 && str[i+2] < 91){

    }else if(str[i] > 96 && str[i] < 123 && str[i+1] == '-' && str[i+2] > 98 && str[i+2] < 123){

    }else if(str[i] > 47 && str[i] < 58 && str[i+1] == '-' && str[i+2] > 47 && str[i+2] < 58){

    }else{
        exstr[lasti++] = str[i];
        continue;
    }

    start = i;
    i += 2;
    for(j = str[start]; j <= str[i]; j++)
        exstr[lasti++] = j;
}

printf("%s\n",exstr);
return 0;
}

3 个答案:

答案 0 :(得分:2)

你需要为你的字符串中的一个终结符留一个空格 - 在这里你将它定义为char [16],然后将16个字符放在0..15的位置,这样你就没有空终止符了检查。

如果你定义为char [17]你应该没问题

答案 1 :(得分:2)

在C字符串中以空值终止。

详细了解here on wikipedia

所以你需要在末尾留出一个空间用于零终止符。

char str[17] = "--g-6hA-Za-z56-9"; /* here the compiler is so kind to insert the null terminator for you */

或者Quentin建议让编译器自己解决这个问题

char str[] = "--g-6hA-Za-z56-9"; /* here the compiler is so kind to insert the null terminator for you and figure out the length */

答案 2 :(得分:0)

正如其他人已经回答的那样,你没有为空终结者留下空间作为str中的最后一个元素

结果发生了什么,你继续你的循环迭代过去&#34;结束&#34;因为str [i]不等于0,所以(或者更确切地说是你期望的结果)str

迭代将继续,直到你碰巧到达满足你的for循环条件的内存,它应该检查str的结尾(由空终止表示)