我在 C 語言中相當新。我想將函式中的字串分配給指標,但我不知道為什么它不起作用?
這是初始代碼:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <stdint.h>
#include <stdbool.h>
#include <string.h>
void test(char* result) {
*result = "HELLO";
}
int main() {
char result[64];
test(result);
printf("%s", *result);
}
這是錯誤:警告:賦值從沒有強制轉換的指標生成整數。由于 * result 應該存盤值并且 result 是地址,這不應該解決嗎?
uj5u.com熱心網友回復:
您好,歡迎來到 C.
您的宣告:
*result = "HELLO";
與嘗試執行以下操作相同:
result[0] = "HELLO"
它試圖將單個字符設定為字串,而您不能這樣做。
您將需要逐個字符地復制字串
幸運的是,有一個你已經包含的函式被<string.h>呼叫strcpy
strcpy(result,"HELLO")
只要您要復制的字串少于您在 main() 函式中定義的 63 個字符,這將起作用。
char result[64];
您可能還應該將字串的長度發送到測驗函式并使用 strncpy
strncpy(result,"HELLO",length); // safe copy
然后用 '\0' 終止字串
result[length-1] = 0;
您的 printf 不需要取消參考字串指標。如此簡單 printf("%s",result);很好。
總而言之:
void test(char* result,uint32_t len) {
strncpy(result,"HELLO",len); // safe copy (however "HELLO" will work for 64 length string fine)
result[len-1] = 0; // terminate the string
}
#define MY_STRING_LENGTH 64
int main() {
char result[MY_STRING_LENGTH ];
test(result,MY_STRING_LENGTH);
printf("%s",result); // remove *
}
uj5u.com熱心網友回復:
您在 main 中宣告了一個陣列
char result[64];
傳遞給函式,它被轉換為指向陣列第一個元素的 char * 型別的右值。該函式處理此指標的副本。更改此指標副本不會影響原始陣列。
在函式中,運算式*result的型別為char。所以這個任務
*result = "HELLO";
沒有意義。
在這次通話中
printf("%s", *result);
再次使用了型別不正確的 char 運算式*result。
您需要的是使用標準字串函式strcpy。
例如
#include <stdio.h>
#include <string.h>
void test(char* result) {
strcpy( result, "HELLO" );
}
int main( void ) {
char result[64];
test(result);
puts( result );
}
uj5u.com熱心網友回復:
宣告變數“result”后洗掉“*”并在代碼中使用函式“strcpy()”。
uj5u.com熱心網友回復:
問題:
當您將字符存盤在 char 變數中時,它會將字符的 ASCII 放入記憶體中。
char c='a';是相同的char c=97;
您可以使用以下代碼驗證這一點:
char c='a';
printf("%d",c);
所以這是一種方法:
void test(char* result) {
*result = 'H';
*result = 'E';
*result = 'L';
*result = 'L';
*result = 'O';
}
int main() {
char result[64];
test(result);
printf("%s", result);
}
但它是多余的,因為有一個呼叫strcpyin的函式<string.h>。
#include <stdio.h>
#include <string.h>
void test(char* result) {
strcpy( resul, "HELLO" );
}
int main() {
char result[64];
test(result);
puts( result );
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439018.html
