Das folgende ProgrammIst das Verhalten nicht definiert, wenn die Zielzeichenfolge in der Funktion strcat nicht null ist?
// Code has taken from http://ideone.com/AXClWb
#include <stdio.h>
#include <string.h>
#define SIZE1 5
#define SIZE2 10
#define SIZE3 15
int main(void){
char a[SIZE1] = "Hello";
char b[SIZE2] = " World";
char res[SIZE3] = {0};
for (int i=0 ; i<SIZE1 ; i++){
res[i] = a[i];
}
strcat(res, b);
printf("The new string is: %s\n",res);
return 0;
}
hat gut Verhalten definiert. Gemäß der Anforderung ist die Quellzeichenfolge b
null-terminiert. Aber was wäre das Verhalten, wenn die Leitung
char res[SIZE3] = {0}; // Destination string
mit
char res[SIZE3];
ersetzt Ist sagt Standard explizit über den Zielstring zu null zu beendet werden?
Ich denke, 'strcat' beginnt die Suche nach dem' null Terminator' in die 'res' Zeichenkette vor der Verkettung der Zeichenfolge, so dass es UB ist. – LPs
@LPs Was genau ist UB? Ist diese Zeile 'char res [SIZE3] = {0};' resize' auf '15' ZERO's zu initialisieren? – Michi
@Michi Lesen Sie einen anderen Blick auf die Frage: OP möchte wissen, ob 'char res [SIZE3];' stattdessen. – LPs