【问题标题】:c programming input last element is @c编程输入最后一个元素是@
【发布时间】:2015-09-26 15:41:47
【问题描述】:

我正在从 Brian W. Kernighan(作者)、Dennis M. Ritchie(作者)在练习 2-5 的书中学习 c 语言:

编写函数any(s1,s2),它返回字符串s1中的第一个位置 其中出现字符串 s2 中的任何字符,如果 s1 不包含 s2 中的字符,则为 -1。 (标准库函数 strpbrk 做同样的工作,但返回一个指向 位置。)

我有这个问题输入的最后一个元素是'@'这是我的代码:

#include <stdio.h>

void chloc(char s1[], char s2[]);

main(void)
{
    int c, i, j;
    char s1[20], s2[20];
    i = j = 0;
    while((c = getchar()) != '\n')
        s1[i++] = c;
    while((c = getchar()) != '\n')
        s2[j++] = c;

    chloc(s1, s2);

    return 0;

}

void chloc(char s1[], char s2[]){

    int i, j, b, k;
    i = 0;
    j = 0;
    for( i = 0; s1[i] != '\0'; i++)
        for(j = 0; s2[j] != '\0'; j++)
            if(s1[i] == s2[j]){
                printf("First uccurance of %d is %d\n", s1[i], i);
                s2[j] = '#';
            }


}

【问题讨论】:

  • 您的问题是什么?你想要什么,这段代码能给你什么?
  • 在这个输入 'beqabeqa' 上,是
  • char s1[20], s2[20]; --> char s1[20] = {0}, s2[20] ={0};
  • 不知道你在说什么。尝试使用整个句子。
  • 无论你的 chloc 在做什么,它都不是应该的......

标签: c arrays input


【解决方案1】:

您的输入代码没有'\0'-终止您的字符数组,因此它们不是有效的字符串(所有字符串都以'\0' 终止)。这就是为什么你的字符串处理函数会访问末尾的元素,读取垃圾。

你可以这样修复它:

while((c = getchar()) != '\n')
    s1[i++] = c;
s1[i] = '\0';
while((c = getchar()) != '\n')
    s2[j++] = c;
s2[j] = '\0';

但您确实应该确保您读取的字符数不超过数组可以存储的字符数(19 个字符 + 1 个终止符)。

此外,该函数应该返回结果,而不是打印结果(根据练习)。

【讨论】:

    猜你喜欢
    • 2018-01-22
    • 2020-10-15
    • 2019-05-05
    • 1970-01-01
    • 2015-07-16
    • 2014-06-19
    • 2017-11-28
    • 2015-01-16
    相关资源
    最近更新 更多