簡體   English   中英

嘗試在C中連接字符串的這段代碼有什么問題?

[英]What is wrong with this code attempting to concatenate strings in C?

我只是想在C中連接兩個字符串,我不知道為什么,但是我遇到了段錯誤。 我使用gdb跟蹤到了下面的代碼行的第一行。

  strcat(tempString, "uptime");
  pFile = fopen (tempString,"r");

tempString是=“ / proc /”。 我只想將字符串“ uptime”附加到tempString,然后嘗試打開文件(如果它存在於/ proc文件夾中)。 當strcat()調用memcpy()時,即發生實際的段錯誤。

您尚未在這些行之前顯示任何代碼,但是很可能使用

tempString = "/proc/";

這使其成為常數(具有恆定的內存大小分配)
第二行strcat將嘗試覆蓋字符串常量,這會將緩沖區之外的6個字節放入未知區域(*如果成功)。

負責任地使用strcat: http : //beej.us/guide/bgc/output/html/multipage/strcat.html

*正如JeremyP所指出的那樣,如果它指向文本段,則它是只讀的,將導致段錯誤

如果您向我們展示定義tempString的行,這將有助於確認事情。 但是,看起來好像有一些char * tempString = "/proc/"; ,並嘗試對其進行修改。 由於它是帶引號的字符串,因此您可能會或可能無法對其進行修改,如果嘗試,則很可能會出現分段錯誤。 (此外, "/proc/"長度為7個char ,在末尾添加任何內容將覆蓋某些內容。)

對於可修改的字符串,您需要在堆棧或堆上分配自己的緩沖區,並且需要確保其足夠長。

暫無
暫無

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

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