首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isalpha()不能正常工作

isalpha()不能正常工作
EN

Stack Overflow用户
提问于 2015-03-02 12:38:01
回答 3查看 924关注 0票数 0

我尝试使用for循环逐个字符地检查两个字符串,看看它们在哪里相等,在哪里不同,如果是,那么我做了一个条件,但如果一个是字母,一个是下划线,那么我就做其他的事情。循环的第一部分工作正常;它可以判断两个值何时相等。但是,当我使用isalpha来查看它们是否都是不同的字母时,它不会执行此操作。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char s1[] = "v_intner_";
char s2[] = "wri_t_ers";


char* getTranscript(char* s1, char* s2){
    int i;
    char sOneTemp[9];
    char sTwoTemp[9];
    char eTranscript[9];
    strcpy(sOneTemp, s1);
    strcpy(sTwoTemp, s2);

    for(i=0; i<9; i++){
        if(sOneTemp[i]==sTwoTemp[i]){
            printf("Those two characters are equal.\n");
        }
        if(sOneTemp[i]!=sTwoTemp[i]){


            if(isalpha(sOneTemp[i]) && isalpha(sTwoTemp[i])){
                printf("Both are letters\n");
            }
            else{
                printf("One is a dash\n");
            }
        }
    }
printf("The value of s1 is: %s\n", sOneTemp);

return s1;}
main()
{
printf("The main method returns: %s", getTranscript(s1,s2));
return 0;
}
EN

回答 3

Stack Overflow用户

发布于 2015-03-02 12:42:14

您的isalpha逻辑是正确的。但是,您有一个缓冲区溢出:

代码语言:javascript
复制
char sOneTemp[9];
char sTwoTemp[9];

但是您可以使用strcpy将10个字符复制到中(请记住,C字符串有一个空终止符)。如果你修复了这个错误,那么代码就会给出预期的输出。

一个很好的修复方法是在函数中使用s1s2,而不是冗余地复制输入字符串。

票数 2
EN

Stack Overflow用户

发布于 2015-03-02 12:43:38

您的程序会受到未定义行为的影响。要使用strcpy字符串"v_intner_",目标系统至少需要10个字符。您创建的数组只有9个字符。

更改行:

代码语言:javascript
复制
char sOneTemp[9];
char sTwoTemp[9];

代码语言:javascript
复制
char sOneTemp[N]; // Where N is 10 or greater.
char sTwoTemp[N];
票数 2
EN

Stack Overflow用户

发布于 2015-03-02 12:42:38

代码语言:javascript
复制
char sOneTemp[9];
char sTwoTemp[9];
char eTranscript[9];
strcpy(sOneTemp, s1);
strcpy(sTwoTemp, s2);

您的数组大小不足以容纳包括nul字符在内的10个字符。因此,增加数组大小以包含nul字符

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28802799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档