我刚开始学习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;
}
答案 0 :(得分:2)
你需要为你的字符串中的一个终结符留一个空格 - 在这里你将它定义为char [16],然后将16个字符放在0..15的位置,这样你就没有空终止符了检查。
如果你定义为char [17]你应该没问题
答案 1 :(得分:2)
在C字符串中以空值终止。
所以你需要在末尾留出一个空间用于零终止符。
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的结尾(由空终止表示)