我是C語言編程的初學者。當我在做一個簡單的作業時,我的代碼出現了分段故障。當我用gdb除錯時,我發現從 "manchester "方法回傳的指標與main中分配的指標 "encoded "不同。
我的代碼如下
#include <stdio.h>/span>
#include <stdlib.h>
char* manchester(char* bitstring);
char* differential_manchester(char* bitstring);
int main(){
int方法。
scanf("%i
", &method); //掃描要編碼的方法。
char* bitstring = (char *) malloc(100*sizeof(char) ) 。//假定最大長度=100。
scanf("%s"/span>, bitstring)。
char* encoded;
if(method == 0){
char* encoded = manchester(bitstring); //where the confusion occur。
}
else if (method == 1) {
char* encoded = differential_manchester(bitstring)。
}
printf("%s"/span>, encoded)。
free(encoded)。
free(bitstring)。
return 0;
}
char* manchester(char* bitstring){
char* encoded_st = (char*) malloc(200*sizeof(char) ) 。
int i = 0, j = 0;
while (bitstring[i] != ''/span> ){
if (bitstring[i ] == '0){
encoded_st[j ] = '1';
encoded_st[j ] = '0'。
}
else{
encoded_st[j ] = '0';
encoded_st[j ] = '1';
}
}
encoded_st[j ] = 0; //append null character at end.
return encoded_st;
}
char* differential_manchester(char* bitstring){
//TODO:尚未實作。
return NULL。
}
gdb 除錯
(gdb) b encode.c:14
斷點1在0x1222:檔案encode.c,行14.。
(gdb) 運行
啟動程式。/home/ishad/Desktop/computer communication/a.out
0 (gdb)
1010
斷點 1, main () at encode.c:14
14 if(method == 0){
(gdb) n
15 char* encoded = manchester(bitstring)。
(gdb) s
manchester (bitstring=0x7ffff7e5a2d4 < __GI___libc_malloc 116> "I211300H20530017204300") at encode. c:27
27 char* manchester(char* bitstring){
(gdb) n
28 char* encoded_st = (char*) malloc(200*sizeof(char) ) 。
(gdb) n
29 int i = 0, j = 0;
(gdb) n
30 while (bitstring[i] != ''/span> ){
(gdb) n
31 if (bitstring[i ] == '0'/span>){
(gdb) n
36 encoded_st[j ] = '0';
...
(gdb) n
30 while (bitstring[i] != ''/span> ){
(gdb) n
40 encoded_st[j ] = 0; //append null character at end.
(gdb) n
41 return encoded_st;
(gdb) p encoded_st
$1 = 0x5555559720 "01100110"
(gdb) n
42 }
(gdb) n
main () at encode.c:20
20 printf("%s"/span>, encoded)。
(gdb) p encoded
$2 = 0x7fffffdec0 "01"/span>
我的問題是為什么encoded_st指標與encoded指標不同。 我試圖用幾個關鍵詞來尋找原因。但是我沒有找到類似的問題。 :(
)uj5u.com熱心網友回復:
你在if陳述句的范圍內重新宣告了同名的變數encoded
char* encoded;
if(method == 0) {
char* encoded = manchester(bitstring); //where the confusion occur。
}
else if (method == 1) {
char* encoded = differential_manchester(bitstring)。
因此,在相對于if陳述句的外部范圍內宣告的變數encoded保持未初始化狀態。
洗掉if陳述句中的宣告
char* encoded;
if(method == 0) {
encoded = manchester(bitstring); //where the confusion occur.
}
else if (method == 1){
encoded = differential_manchester(bitstring);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315477.html
標籤:
上一篇:使用getchar()來存盤char*pointer中的字串字面的地址
下一篇:Flask何時存盤用戶的認證?
