簡體   English   中英

執行時出錯:分段錯誤

[英]Error while executing: Segmentation fault

我是C語言的初學者。 閱讀Ritchie的書的初始章節之后,我編寫了一個程序來生成隨機數和字母。

該程序可以用gcc很好地編譯。 但是,在運行它時,會出現錯誤“細分錯誤”,這是我有限的知識所無法理解的。 我很高興了解我寫錯了什么。

#include <stdio.h>
#include <stdlib.h> 
#include "conio.h"
#include <time.h>


long int genrandom(int,int);
void randAlph(void);
char letterize(int);

int main (void) {
//     char full[9];
//     char part_non[4];  
    srand(time(0));        

    int i;
    for (i=0;i<50;++i) {
      randAlph();
    };

}

long int genrandom(int mino,int maxo) {
    int val=mino+rand()/(RAND_MAX/(maxo-mino)+1);
    return val;  
}

void randAlph (){
  int val;
  char text;
val=genrandom(0,26);
//  return val;
text=letterize(val);
printf("%s ,",text);

}

char letterize(int num) {
  char letter='A'+num;
  return letter;
}

printf("%s ,",text); 是錯誤的-它表示text是一個以零結尾的字符數組。 采用

printf("%c ,", text);

而是打印您的單個字符。

#include <stdio.h>
#include <stdlib.h> 
#include "conio.h"
#include <time.h>


int genrandom(int,int);
void randAlph(void);
char letterize(int);

int main (void) {
//     char full[9];
//     char part_non[4];  
    srand(time(0));        

    int i;
    for (i=0;i<50;++i) {
      randAlph();
    };

}

int genrandom(int mino,int maxo) {//changed function return type to int
    int val=mino+rand()/(RAND_MAX/(maxo-mino)+1); //Be careful when you are using '/' operator with integers
    return val;  //returning int here why set return type to long int?
}

void randAlph (){
  int val;
  char text;
  val=genrandom(0,26);
  //  return val;
  text=letterize(val);
  printf("%c ,",text);//Replace %s with %c

}

char letterize(int num) { //No bound checking on num eh?
  char letter='A'+num;
  return letter;
}

這就是我要說的。 :)

textchar時為什么要使用%s 您不需要在函數中的字符串類型。 只是一個字符會做。 函數更改: void randAlph ()

printf("%s ,",text);

printf("%c ,", text);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM